您好, 访客   登录/注册

基于模块化设计的Web应用程序漏洞利用框架研究与开发

来源:用户上传      作者: 吴羽翔

  摘 要:在Web渗透测试中,使用自动化工具进行漏洞利用向来是安全人员比较喜欢的一种手段。但随着Web应用的不断发展,传统的自动化安全工具已无法满足渗透测试员的需求。本文提出了一种全新的Web应用攻击模型,根据此模型设计了一个开放式的基于模块化设计的Web应用程序漏洞利用框架,并简述了其部分开发细节。该框架可以实现针对特定Web应用的定制化渗透测试并通过其高度自由的模块化定制实现各类拓展。
  关键词:Web渗透测试;漏洞利用;模块化框架
  中图分类号:TP311.10
  1 Web渗透测试中的自动化攻击难题
  随着Web应用越来越广泛,Web安全威胁日益凸显。在这种情况下,互联网上涌现出一大批Web安全测试工具,安全人员也往往喜欢使用这些自动化工具对目标站点进行安全测试。使用工具攻击可以避免人工进行重复工作,减少安全人员的工作量,但随着Web应用的进一步发展,传统自动化工具也面临着诸多问题。
  传统Web应用程序自动化工具普遍基于Fuzzing技术,通过向目标输入大量预先定义好的危险数据,观察站点响应,从而进行攻击。这类工具有几大天生的缺陷:
  一是所有攻击向量均是事先定义好的,无法动态编辑,从而限制了攻击的灵活性,如果工具中现有向量对Web应用无法产生效果,则攻击便无法继续进行。且攻击缺乏针对性,无法针对目标漏洞进行精确打击。
  二是攻击模式单一,传统自动化工具普遍采用“请求-响应”的攻击模式,但某些复杂的Web应用程序漏洞,在能够攻击漏洞前可能需要进行多次不同的请求,或是进行某些特定操作后才可以接触到漏洞页面,在这种情况下传 统自动化工具将无法产生任何效果。
  三是捕获响应的手段有限,传统自动化工具捕获响应的格式通常是预先定义好的,只能使用通用的匹配模式进行响应数据的捕捉,实际应用中可能会无法捕获到Web应用返回的响应,因此不能从响应数据获取攻击结果。
  四是由于开发者的安全意识逐步提升,不少Web系统都采取了一定的安全措施,包括输入过滤等。面对这些防御措施,传统的自动化工具的“无差别攻击”模式不仅无法绕过防御,还有可能因为触发了系统防御机制而使得连接被阻断。
  五是相比客户端应用程序,Web应用程序普遍具有定制性,不同的单位为满足自身需要,会定制本单位专有的Web平台,这些平台在开发过程、编码规范等方面一般不会遵循同样的准则。这使得按照“标准”状况开发的自动化工具在应对一些“意外”情况时往往无能为力。
  2 基于模块化的Web应用攻击
  鉴于现有自动化Web安全工具存在以上种种缺陷,安全人员迫切需要一种全新的Web渗透测试自动化解决方案,新方案需要解决的主要问题便在于如何使自动化攻击可以根据目标特点进行调整与定制,针对指定目标,只需人工做出微小的调整,便可以使接下来的攻击自动进行,让攻击更加精确有效,且能够针对同一漏洞的攻击可以很方便地实施重放。为此,我们需要构建一个全新的模型来满足这些要求。
  针对Web应用的攻击从本质上来说就是发送一个个经过精心构造的http请求,因此我们可以将一次完整的针对Web应用程序的攻击抽象为一个模型。模型划分为两部分:攻击模式和攻击向量。攻击模式指的是发起攻击的http请求模式,它定义了http请求的顺序、请求路径、完成请求所需的合法变量,及攻击数据的输入点。攻击向量指的是在该次攻击中输入的危险数据,通过这些输入可以对目标造成不同的攻击效果,此外,攻击向量还定义了捕获响应数据的方式,因此可以根据不同的输入攻击数据在不同的响应中获取相应的攻击结果。
  这种模块化的Web应用攻击模型实现了“攻击模式”与“攻击向量”的分离,将二者变为两个独立的模块。在实际渗透测试过程中,攻击向量即向服务端注入的恶意代码,它往往是可以重用的,而攻击模式则根据目标自身的特点会有所变化。通过对两个模块的自由定制与组合,可以很方便地开发出针对特定Web应用程序漏洞的EXP(漏洞利用程序)与POC(漏洞证明)。
  图1 模块化Web应用攻击模型
  3 模块化Web应用程序漏洞利用框架的实现
  3.1 整体构架
  为了将上述模型应用于实际,我们需要开发一个应用程序,实现一个基于模块化设计的Web应用程序漏洞利用框架。该框架分为主程序和拓展模块。可以构建针对Web应用程序的攻击模式与攻击向量,通过将特定的攻击模式与攻击向量组合,即可以对目标应用发起定制化攻击。
  主程序应包含完成底层网络通信所需的所有功能,可以构造任意Http请求以完成攻击,所有核心功能均在主程序中定义完成以供各个模块调用。
  所有模块应该是可轻易拓展的,模块均有自己的接口规范,它们可以调用主程序中的相关函数,模块构建完成后不需经过编译即可直接在主程序中加载。
  在程序执行过程中,主程序首先载入一个攻击模式,同时声明需要攻击的目标站点主机地址、端口号、超时时间等。在攻击模式中,定义了实施该攻击所需发送的Http请求数量、请求顺序、及各个请求的详细请求内容(包括请求头,请求体),此外还在请求内容中定义了插入攻击向量的位置。
  之后,主程序载入一个适应该攻击模式的攻击向量,这个攻击向量会自动将攻击模式Http请求内容中指定的点替换为攻击用的恶意代码,然后按照攻击模式的设计对目标站点发起请求进行攻击,在一轮攻击结束后,目标站点会返回一个或多个Http响应,攻击向量会根据预先设定的规则,从这一个或多个响应中捕获符合规则的字符串,从中提取所需结果。
  图2 程序执行流程
  3.2 可拓展性框架
  在基于模块化设计的Web应用程序漏洞利用框架中,应选用嵌入式语言或是脚本语言进行拓展模块的开发,所有核心功能已在主程序中注册并提供相应的接口供拓展模块调用,同时可以建立一些公共模块提供如响应字符串的处理等常用的辅助性功能。自定义模块载入这些公共模块后亦可直接调用。因而自定义模块在实现相关功能时只需编写简单的流程控制代码即可。   3.3 模块化Web渗透测试
  利用该框架丰富的可拓展性和自由的定制功能,可以进行实现各类的Web渗透攻击。
  (1)定制化攻击
  在渗透测试中,当传统自动化工具针对某些Web系统漏洞无法进行自动利用时,可以通过框架进行定制化攻击。
  首先通过手工或其他手段确定该漏洞所在页面、数据输入点,请求方式等等。然后针对该漏洞情况选择一个适用的攻击模式或是重新编写一个新的攻击模式,载入可用的攻击向量,针对该漏洞发起攻击。
  (2)通用程序漏洞EXP开发
  当某个通用程序出现漏洞时,针对该漏洞的具体情况编写对应的攻击模式与攻击向量,并将这两个模块关联,这便形成了一个EXP。在今后的测试中,如果发现对应的通用程序,便可以直接载入相应的模块进行攻击。而针对互联网上常见的通用程序漏洞可以在编写对应EXP后形成漏洞库,方便安全人员进行研究及完成渗透测试任务。
  (3)拓展功能
  由于本框架的开放性与高度自由的定制功能,可以利用它实现各类拓展性功能,例如通过灵活利用可定制的两个模块,可以自行实现漏洞扫描功能。在需要对某个目标站点进行扫描时,先编写使用与该站点的攻击模式,然后将攻击向量中的恶意代码替换为一组可能存在漏洞的检测代码,通过循环控制对目标站点进行Fuzzing,检测可能存在的漏洞。框架本身仅封装了发起Http请求的相关函数,通过拓展模块可以定制请求从而实现各种拓展功能。应用程序本身只是提供了一个框架,通过用户的定制模块可以实现各种可能性。
  3.4 应用前景
  目前,由于各类传统自动化工具应用受限,基于模块化设计的Web应用程序漏洞利用框架有着广泛的应用前景。该框架通过高度定制化的模块实现了安全人员对Web渗透测试全过程的精确控制,且核心功能的高度集成使得安全人员可以毫不费力地完成给类复杂的定制化攻击。
  通过该框架可以轻松建立起常用Web通用程序的漏洞库,从而简化针对通用程序的漏洞利用过程。同时,在各种开放式漏洞提交平台如雨后春笋般出现的今天,该框架的可以轻松构建各类Web平台漏洞的POC,促进白帽社区整体发展。
  参考文献:
  [1]Sutton M,Greene A,Amini P,et al.强制性安全漏洞发掘[J].2009.
  [2]张亮,朱磊明,王康.一种基于Web漏洞威胁模型的网站安全分析技术[J].微型电脑应用,2008(05):56-58.
  [3]徐玲.WebFuzz的Web软件漏洞测试[J].软件导刊,2012(08).
  [4]陈春霞,黄皓.攻击模型的分析与研究[J].计算机应用研究,2005(07):115-118.
  作者简介:吴羽翔(1993-),男,江西南昌人,2011级网络安全与执法专业本科生,主要研究方向:web开发与web安全。
  作者单位:中国人民公安大学 网络安全保卫学院,北京 102623
转载注明来源:https://www.xzbu.com/8/view-5708334.htm