没有合适的资源?快使用搜索试试~ 我知道了~
改进的静态污点分析方法用于检测输入验证漏洞
沙特国王大学学报一种检测输入验证漏洞的改进静态污点分析方法Abdalla Wasef Marashdiha,Zarul Fitri Zaabaa,Khaled Suwaisba计算机科学学院,Universiti Sains Malaysia,11800 Pulau Pinang,马来西亚b沙特阿拉伯阿拉伯开放大学计算机系阿提奇莱因福奥文章历史记录:2022年10月31日收到2023年1月3日修订2023年1月8日接受2023年1月13日在线提供保留字:输入验证漏洞XSSSQLi静态分析着色分析A B S T R A C T可行路径的检测有助于最小化误报率。然而,以往的工作在对输入验证漏洞进行分析检测时,没有考虑程序路径的可行性,从而导致误报。他们还需要验证针对用户输入的每个上下文中正确的消毒功能的使用。因此,我们提出了一种增强的静态污点分析方法来分析源代码和跟踪程序中的污染输入。它首先检查源代码,以找到程序中每条路径的可行性。通过分析跟踪污染变量,直到执行污染变量的sink语句构建了一个算法来增强静态分析器,以处理PHP中的变量处理函数所提出的方法进行了评估与SARD数据集和大规模的PHP程序。实验结果表明,XSS漏洞检测精度比WAP提高约44%,比RIPS提高约26%; SQL注入检测精度比WAP提高约10%,比RIPS提高约19%。此外,所提出的方法优于以前的符号执行研究检测到的漏洞的数量。版权所有©2023作者。由爱思唯尔公司出版代表沙特国王大学这是一个开放的访问CC BY-NC-ND许可证下的文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。1. 介绍Web应用程序特别容易受到攻击,在开源和商业应用程序中都发现了漏洞,这一事实表明,几乎一半的报告漏洞都是在Web应用程序中发现的(Doyle和Walden,2011)。超文本预处理器(PHP)现在是最流行的编程语言之一(Kunda和Siame,2017)。开源社区和企业都使用它来构建大型Web应用程序和框架。然而,固有的安全问题使得利用编程漏洞相对容易。跨站脚本(XSS)和SQL注入(SQLi)是两种常见的漏洞。开放Web应用程序安全项目(OWASP)(OWASP,2020)将XSS和SQLi列入10个最常见的Web应用程序漏洞列表SQLi指的是*通讯作者。电子邮件地址:zarulfitri@usm.my(Z.F. Zaaba)。沙特国王大学负责同行审查为Web输入插入SQL命令或控制字符,以操纵如何在后端执行SQL查询。XSS漏洞利用是通过向Web URL附加脚本标记来欺骗个人点击恶意链接来实现的。该漏洞被设计为在目标系统上本地执行。这种攻击利用了预先存在的用户-服务器信任。此外,它们受益于服务器级别的输入/输出检查不足;如果实施,这种检查可以停止恶意Java脚本代码的执行。这些弱点提供了恶意技术,如SQLi和XSS,以远程控制Web应用程序或导致涉及私人用户数据的数据窃取。因此,本文重点介绍了这两个漏洞(SQLi和XSS)。用户数据验证和有关适当验证的方面导致此类漏洞。静态代码分析是一种有助于检测Web应用程序代码中的可扩展性的技术(Deshlahre和Tiwari,2020)。关键思想是将来自不可信源的污染分类到可信汇,并检查是否会从该方向产生攻击(Falana et al.,2022年)。静态分析的目标是通过验证源代码来遍历和检查所有可能的代码路径。然而,强调Web应用程序测试的广泛路径覆盖可能会 导致误报(FP)(Chang et al.,https://doi.org/10.1016/j.jksuci.2023.01.0091319-1578/©2023作者。由爱思唯尔公司出版代表沙特国王大学这是一篇基于CC BY-NC-ND许可证的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。制作和主办:Elsevier可在ScienceDirect上获得目录列表沙特国王大学学报杂志首页:www.sciencedirect.comA.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报6832019; Marashdih等人,2018年)。FP是那些实际上是安全的但被报告为漏洞的结果;因此,不管用户输入的类型如何,都不会执行。此外,研究人员(Nazarahari等人,2019年; Choma Neto,2020年)断言,编码器必须识别可执行路径;测试应该只对可行路径进行。可行路径指的是可到达且可执行的代码段.可行路径识别有助于减少与静态代码分析相关的FP相关的挑战。因此,存在增强漏洞检测先前研究中的差距(Jovanovic等人,2006;Wassermann和Su,2008; Gupta等人,2014; Medeiros等人,2015; R. Technologies,2021; Jurásek,2018)的缺点是,他们在漏洞检测过程中没有考虑路径的可行性,因为他们专注于检测尽可能多的漏洞,以提高他们提出的方法的真阳性率。这导致将某些用户输入检测为vulner-abilities(误报),即使它们根本不会被执行(不可行路径)。在我们以前的工作中(Marashdih等人,2021),我们提出了一种检测PHP源代码中可行路径的方法,表示为“可行路径检测(FPD)”,这是第一个旨在检测PHP语言中此类路径的静态分析器。然而,PHP语言是高度动态的,包括内置的变量处理函数,这为程序员提供了很大的灵活性。由于变量处理功能,传统的静态代码分析方法对于标准分析和转换包来说可能是具有挑战性的(Hills等人,2013年)。FPD求解器不能直接解释和理解变量句柄函数,其中每个Web应用程序都由大量这些函数组成。分析变量处理函数将开发增加可以分析的条件并降低漏洞检测结果中的FP率的能力(Hills等人,2013; Hills,2015;Hills,2015; Dahse和Holz,2014; Kyriakakis等人,2019;Kyriakakis等人, 2016年)。因此,我们通过解决包含PHP变量处理函数的条件,提高了FPD分析条件的能力,确保其可行性。此外,一些变量处理功能(例如,is_int()、is_float等)可用于验证用户输入。因此,分析这些函数有助于污点分析确定这些函数中引用的用户输入是否安全。文献(Medeiros等人,2015; Dahse和Holz,2014;Jovanovic等人,2006; Long等人,2020; Wassermann和Su,2008; Nunes等人,2015 ) 考 虑了 已 经 被 任 何标 准 函 数 接 受的 所 有 用 户 输入 ( 即 ,htmlspecialchars和htmlentities)作为安全变量。尽管如此,这些函数中的一些不适合逃避关于漏洞的一些情况(Marashdih等人,2022;Bensalim 等 人 , 2021 年 ) 。 根 据 OWASP 预 防 规 则 ( OWASP ,2021),每个漏洞中存在多个上下文,需要不同的方法来逃避和清理用户输入。因此,为了提高检测率(真阳性,TP)并降低因使用不当方法逃避用户输入而导致的FP率,我们验证了用于保护程序中用户输入的清理功能,并根据OWASP预防规则(OWASP,2021)检查其是否足以缓解漏洞。软件保障参考数据集(SARD)(数据库,2021)用于获取有关逃避各类OWASP预防规则的适当功能的一些知识。该项目试图指导标准评估套件的开发,包括确保软件保证的技术。SARD数据集包括几个测试用例,用于识别基于PHP的XSS和SQLi漏洞。因此,我们提取每个数据集中的清理功能及其使用上下文(即,风格,Java-脚本和HTML上下文)和文件状态(安全或不安全),这增强了我们的污点分析器基于每个上下文验证用户输入我们工作的主要贡献可归纳如下:提出了一种增强FPD静态分析器处理PHP变量处理函数的算法。该算法将有助于提高漏洞检测能力,降低静态分析结果的FP率。增强的FPD分析器与污点分析相结合,以检测输入验证漏洞。FPD帮助污点分析跳过那些根本不会执行的路径(不可行路径),而污点分析旨在检测FPD建议的每个可行路径中的漏洞。每个检测到的漏洞都将根据OWASP预防规则进行验证。提取SARD数据集,为我们的静态污点分析器提供有关适当功能的一些知识,以清理每个漏洞上下文。进行了实验评估,以评估所建议的方法。实验测试是在一个合成的PHP代码和其他10个公开的Web应用程序上进行的。我们的研究结果表明,所提出的方法可以分析和发现输入验证漏洞,其FP率低于相关研究(Medeiros等人 ,2015; Dahse 和Holz ,2014; Long等人 , 2020年)。本文的其余部分组织如下。在第2节中,我们介绍了输入验证漏洞(包括SQLi和XSS)、静态污点分析和PHP变量处理函数的背景。第三部分是相关研究。第4节介绍了拟议的方法和改进。实验结果和评价见第5节。第6节讨论了我们的发现。结论备注见第7节。2. 背景和动机2.1. 输入验证漏洞考虑到威胁模型,人们不能信任用户输入数据,因为攻击者可以使用这些输入作为注入恶意脚本和利用Web系统的空间(Li和Xue,2011)。验证应该在应用程序可以使用来自不受信任的用户源(例如,创建SQL查询或服务器响应)。输入验证攻击类别中最常见的威胁是SQLi和XSS(OWASP,2020; Nunes,2022)。它们可以通过恶意内容的执行位置来区分。图1显示了OWASP在2017年和2021年排名的十大漏洞列表。其中显示XSS和SQLi在2021年报告中排名第三,表明这两个漏洞在Web应用程序上的严重性。2.1.1. 跨站点脚本(XSS)XSS(Martin和Lam,2008)包括注入JavaScript片段,便于恶意用户在目标用户的Web浏览器上执行脚本Web应用程序通过使用XSS创建插入到应用程序中的恶意JavaScript代码片段而受到危害。脚本注入以一种对不知情的用户无害的方式发生。最后,受信任的网站域执行包含恶意代码的脚本(Gupta和Gupta,2017)。受害者认为只有文本将被包括在帖子中但是,攻击者可以将脚本“因此,委员会认为,●●●A.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报684Fig. 1.十大安全漏洞列表(OWASP,2020)。当目标用户点击受感染的链接时,注入的JavaScript会自动执行,导致XSS漏洞影响用户的Web体验(Gupta和Gupta,2017)。XSS攻击有三种类型:反射、存储和基于DOM的XSS。在存储的XSS中,恶意脚本被注入到网站中,然后将脚本保存在其数据库中(Yusof和Pathan,2016)。当Web应用程序传递无效的用户输入时,会发生反射XSS。攻击者通常会在用户输入的伪装下将恶意脚本隐藏在URL中。基于DOM的XSS攻击被认为是反射或存储的XSS代码的替代品。在此类攻击中,如果最初不在用户浏览器上执行JavaScript代码的无害部分,则不会在目标浏览器上执行恶意JavaScript片段2.1.2. SQL注入(SQLi)SQL是用于数据库服务器的主要数据库语言,如Oracle,MSSQL和MySQL ( Shar 和 Tan , 2012 ) 。 许 多 编 码 语 言 , 包 括 ASP 、Java、.NET和PHP,都提供了一些构建和实现SQL查询的技术。开发周期短、培训或经验不足以及有关潜在漏洞的信息等情况允许恶意用户利用这些方法,从而促进SQLi漏洞利用。开发人员通常在没有验证的情况下实现SQL语句输入,这导致了最普遍和最严重的编码错误。例如,下面的PHP片段表示一个动态SQL查询。$query =攻击者很可能通过为用户名输入提供“1”=“1”或“v”值来利用这种易受攻击的查询由于没有标准的模型存在,因此缺乏确定每个Web漏洞的通用技术。输入验证漏洞(也称为污点漏洞)是Web应用程序弱点的指定类别(Livshits和Lam,2005; Jovanovic等人,2006年)。此类漏洞表明,发送的受损数据可能导致执行程序较弱的安全问题。SQLi和XSS是污点漏洞的常见示例。污点数据分析是通过实施输入验证来识别脆弱性的有效技术(Yan等人,2017;Zhang等人,2021年)。WebSSARI(Huang等人,2004年)首次评估了PHP语言中污点漏洞的静态代码分析,以确定有关输入验证的弱点。从那时起,已经开发了几种工具(Jovanovic等人,2006;Dahseand Holz,2014; R. Technologies,2021; Marashdih等人,2017年),并实施以确定PHP Web应用程序的弱点。随后的小节提供了有关污点漏洞静态分析的其他信息。2.2. 静态污点分析静态代码分析是源代码评估中常用的技术之一。这种技术有助于在不执行应用程序代码的情况下识别可能的安全弱点或挑战(Marashdih等人,2017年)。静态分析包括对源代码的全面评估,使其成为识别安全漏洞的有效工具(Hedley和Hennell,1985)。通过确定危险(污染)参数来进行污染分析,因为它们包括用户输入的一部分然后在函数内部跟踪这些如果在执行清理或过滤之前使用了受污染的变量,则会标记漏洞。源、汇和消毒剂构成了静态污染分析的三个基本组成部分(Maskur和Asnar,2019)。源表示攻击者可能用于嵌入恶意脚本的源。PHP Web应用程序通常会受到HTTP请求属性、文件上传和会话信息的攻击汇点是实现可能被攻击的动作的点或端函数。PHP Web应用程序包括接收器,包括文件方法,操作系统方法和SQL查询方法。杀毒程序是过滤恶意代码以保护源代码的代码片段。PHP Web应用程序包括几个消毒器,如SQL查询和HTML转义函数。防止输入漏洞需要识别从开发开始到生产部署的程序错误。与其他技术相比,静态分析提供了显着的好处,因为它不执行代码来识别漏洞。这种分析实现了几种方法来扫描代码并识别漏洞。也就是说,静态分析不是无错误的,因为它可能报告对应于不可达代码片段或失败程序执行的FP。当代码路径确实安全但报告为易受攻击时,将报告FP结果。所有可达和可执行的代码路径被称为可行路径(Marashdih等人,2017; Marashdih等人,2018年; Barhoush和Alsmadi,2013年)。基于这些关切,从静态分析的角度来看,FP报告具有挑战性,应该对这一问题进行评估。验证已识别漏洞的执行可能性是FP挑战的可能补救措施(Hongji和Wei,2019; Marashdih等人,2018; Marashdih等人,2021; Marashdih等人,2017);它可以通过检测可以在程序中执行的可行路径来实现(Marashdihet al.,2019; Girgis等人,2014),则污点分析将在检测到的可行路径上工作,这将降低静态污点分析结果中的FP率。2.3. PHP变量处理函数PHP是用于创建Web应用程序后端的顶级编程语言之一(W3tech,2021; Li和Meng,2021; Platt,A.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报6852021年)。PHP与其他几种脚本语言类似,包含各种动态方面,例如变量管理功能。这样的函数使得编程对于编码者来说变得容易;然而,这些函数可能会使自动化分析具有挑战性,因为在分析期间精确地近似运行时方面并不简单。因此,使用强大工具来实现大量代码库的开发人员无法使用足够强大的工具来识别所有安全漏洞并重构代码。通过使用静态分析软件实现这种行为是特别困难的(Hills等人,2013; Hills,2015;Hills,2015)。清单1显示了一个使用可变处理函数“isset“的PHP示例该程序从第2行($var=$_POST用户名)中的变量初始化开始,攻击者可以在XSS恶意脚本)添加到此输入中。随后,第3行中的条件包含一个变量处理函数(isset),它检查变量$user是否被设置,这意味着它必须被声明并且不是NULL。如果条件成功,则将执行第4行中的接收器如果条件失败,第6行中变量($var)的清理函数(htmlspecialchars)将被执行以转义输入,这将保护用户免受第7行中打印状态(echo$var)的XSS攻击大多数静态分析工具,如Medeiros等人。(2015),Ahmed andAli(2016),Dahse and Holz(2014)认为上面的示例代码有一个XSS漏洞,它与第4行中的print语句有关,因为在它之前不存在清理函数。然而,第3行中的条件将始终返回false,因为变量$user没有在程序中声明。因此,第4行中的语句并不容易受到攻击,因为它根本不会执行,并且将此输入检测为漏洞将是FP。我 们 之 前 在 我 们 的 研 究 工 作 中 提 出 了 一 种 称 为 “FPD” 的 方 法(Marashdih等人, 2021),这是第一个PHP静态分析器,确定在PHP源代码中的可行路径。下一节将描述我们之前检测PHP可行路径的方法。2.4. 可行路径检测FPD的目的是检测PHP源代码中的可行路径,它包含四个主要阶段:(1)中间表示(IR):它首先用AST结构表示程序代码,然后将AST转换为MSSA形式,MSSA形式以能够显示程序中的指令流的形式表示树,包括消除对于该形式的变量的相同赋值的不必要的或重复的指令。(2)Symbolic Interpreter:为用户输入的每个输入分配一个符号值。(3)路径生成&约束提取器:其遍历程序流以找到所有程序路径并收集每个路径的条件。(4)SMT求解器:尝试为每个符号输入找到能够满足所提取的条件的合适输入。图2示出了FPD框架(Marashdih等人, 2021年)。使用抽象语法树(AST)解析和转换测试代码。随后,使用从AST格式的直接转换来准备基于静态单分配(SSA)的临时格式。SSA(Schardl等人,2019)形式是中间表示的属性。此属性确保每个变量只定义和写入一次。因此,SSA形式的程序编码显式的数据流关系。图3示出了SSA形式和/或函数的示例。为了理解SSA表示背后的推理,直线代码是一个合适的开始方式。图3示出了为对变量进行的每个赋值提供唯一名称,并且无论在何处使用赋值,都将其重命名为新的赋值名称。大多数程序都包含join和branch节点。一种称为在连接节点处使用phi函数(/)的操作数/function表示到达连接的对V的赋值。Y的任何进一步的使用被认为是V5的使用.先前的变量Y被替换为新的变量V3、V4和V5。所有对Vi的使用都是通过对Vi的单个赋值来实现的。在完整的代码中可以找到对Vi的单个赋值该格式临时格式创建包括通过修剪树来创建最小SSA格式的SSA格式优化。第二阶段开始于标记每个超全局参数(用户输入参数)的符号输入。未定义的参数用于表示具有未知数据的变量,可能会影响路径约束。路径创建技术用于遍历SSA块形式。对于每一代,它标记路径以防止重新检测,并确保没有路径未被检测到。路径生成过程包括识别与路径一起存储的特定于路径的约束条件,路径生成结果和条件识别通过所提出的技术(路径权重法)再次验证以计算路径权重。具有不同权值的路径被传送到约束求解器以验证可满足性(即,在给定的输入集下的可行性。3. 相关作品Web应用程序方面,包括存储配置、安全性和浏览器兼容性,正在不断改进。然而,大量的输入验证漏洞仍然危及Web应用程序的安全性。已经设计了几种技术来识别这种攻击。Pixy是Jovanovic等人(2006)提出的第一个静态分析工具;它是一个开源Java工具,可以检测PHP脚本中的XSS和SQLi缺陷静态代码分析用于检测PHP Web应用程序中的漏洞。Pixy的主要缺点是FP率约为50%(即,对于每个弱点观察一个FP)。Wassermann和Su(2008)提出了一种静态分析,可用于检测对弱或不存在的输入验证有直接响应的XSS漏洞基于Firefox源代码、W3C建议,清单1.PHP源代码中变量处理函数的一个例子A.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报686图二. FPD框架。(Marashdih等人, 2021年)。图三. 一个例子的程序代码转换为SSA形式。以及关于闭源浏览器的在线课程。他们基于字符串分析的工具无法处理任意大而复杂的代码。Shar和Tan(2013)提出了一种检测XSS和SQLi漏洞的工具。首先对可能导致安全攻击的汇和输入的类型进行了分类。对输入过程中常用的用于减少安全事件的许多清理技术进行了分类。利用各汇的脆弱性信息和收集的数据建立了脆弱性预测模型。Gupta等人(2014)提出了一种特定于HTML上下文的方法,通过使用防御性编码和污点评估来识别Web应用程序代码中的注入弱点。研究人员还强调使用自动警报来减少源代码漏洞。在广泛的Web应用程序上实现这种方法相对复杂。Dahse和Holz(2014)将RIPS定义为一种静态源代码分析器,可用于PHP脚本中的漏洞。如果一个面向对象的PHP存在于多个目标文件中,RIPS的检测机制可能会产生误导。因此,这种存在导致高FP率。此外,它还涉及一个手册,步骤,以验证变量处理函数的执行,这需要用户付出相当大的努力,尤其是对于大型程序。Medeiros等人(2015)提出了WAP工具,该工具可以语义分析用PHP编写的Web应用程序的源代码,以检测输入验证漏洞,如XSS和SQLi。特别是,它执行污点分析(数据流分析),以检查系统入口点插入的不可信输入是否数据挖掘被用来区分实际的错误从FP,而实际的错误是自动修复他们的工具。Marashdih等人(2017)提出了一种使用遗传算法(GA)识别PHPWeb应用程序中XSS脚本的方法。控制流图是手工制作的,没有不可行的路径。GA生成器识别弱路径并调节FP结果。他们的方法只在小数据集上手动实现。Yan et al.(2017)制定了一个框架,用于识别源代码中的类似污点的漏洞。它建立在传统的污染风格的框架,并纳入了一个“清洁”的元素来描述卫生过程。他们的框架提出了一种静态的向后污点数据评估技术,以识别类似污点的弱点。结果表明,当执行静态技术来识别Web应用程序代码漏洞时,FP率很高。Jurásek(2018)提出了PHPWandar工具,通过静态污点分析和SSA表示来检测vulner能力。源代码被转换为用于分析的中间表示。已根据一组预定义的节点检查已处理的节点。他们的工具可以分析简短的脚本和简单的程序。Li et al.(2021)评估了为符号PHP处理的内置例程自动化PHP建模的可能性。研究人员提出了一种跨语言编码技术,可以将PHP符号处理过程中收集的适用条件更改为特定于C的代码。随后,他们雇用了C符号执行工具(KLEE(Cadar等人,(2008年)开发的代码。脆弱性识别需要静态污点分析来确定改进区域。所制定的方法与Z3一起用于验证漏洞。然而,只有遗留的PHP版本可以使用这个工具,因为KLEE引入的限制阻止了对最新的PHP解释器的此外,他们还A.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报687不考虑源代码中存在漏洞的上下文。表1总结了相关的污点分析研究,其中第二列显示了在每个提到的研究中检测到的漏洞类型。第三列显示研究是否检查了每个检测到的易受攻击路径的执行能力。第四列检查研究是否检查了源代码中使用的经过清理的函数是否足以保护代码免受漏洞的影响,如前面第2.3节所述。以往的研究都存在检测结果假阳性率高的例如,Balzarotti et al.(2008)依赖于手动生成的测试用例,这表明他们的方法只能识别工具中编码的可验证性。此外,其他方法,如Xie和Aiken(2006)提出的方法,没有考虑对变量处理函数进行建模,这导致忽略了关键攻击和防御向量(Li例如, 2021年)。一些静态分析工具,如Pixy(Jovanovic等人,2006)和RIPS(Dahse和Holz,2014),要求用户验证变量处理函数的执行,以确定执行漏洞的可能性。工具,例如链锯(Alhuzali等人,2016)Navex(Alhuzali等人,2018),认为变量处理函数的手动建模被认为是容易出错的。表1静态污染分析研究总结。作者漏洞类型漏洞执行脆弱性上下文Jovanovic等人(2006年)XSS、SQLi没有没有Wassermann和Su(2008)XSS、SQLi没有没有Gupta等人(2014年)XSS没有是的Medeiros等人(2015)(WAP)一般没有没有电影Jurásek(2018)XSS、SQLi没有没有Dahse和Holz(2014)XSS SQLi没有没有Shar and Tan(2013)XSS、SQLi没有没有Yan等(2017年)XSS、SQLi没有没有Li等人(2021)XSS、SQLi是的没有本研究通过提出一种增强的方法来检测输入验证漏洞(XSS和SQLi)并降低静态分析结果中的FP率,从而弥补了这一差距。首先,我们改进了我们以前的方法“FPD”,通过将其与设计良好的算法相结合来处理PHP中的变量处理函数来检测可行路径。因此,它有助于提高检测FPD求解器无法解决的条件内的实际漏洞的能力。其次,我们结合FPD和污点分析来检测输入验证漏洞。为提高检测率并降低污染分析中的FP率,我们构建了一种算法,可根据OWASP建议的预防规则(OWASP,2021)检查用于保护用户输入的清理功能是否足以逃避漏洞。此外,所提出的方法已在PHP中执行和验证;因为它仍然是构建Web应用程序最广泛使用的Web技术(Odeh,2019)。4. 所提出的方法识别应用程序代码的输入验证弱点与数据移动相关联;目标是识别源代码中有问题的信息运动的思想对于解决三个主要安全方面中的两个至关重要:完整性和机密性(Sandhu,1993)。机密性涉及私有数据到公共实体的移动,而完整性涉及不可信信息到可信对象的移动。本节描述了本工作中提出的方法,并重点介绍了用于增强前静态分析器(FPD)以识别可行路径的算法设计,将FPD与污点分析集成以确定与输入数据验证相关的漏洞,并验证检测到的漏洞的每种情况下的清理功能。图4示出了所提出的方法的总体框架。4.1. FPD和变量处理功能FPD可以分析包含比较参数、对象和值的条件。然而,PHP包含许多可变处理函数(VHF),这些函数在每个PHP Web中都使用见图4。 拟议计划的框架。A.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报688应用程序. 表2显示了PHP中的条件VHF列表,并对每个函数进行了描述和示例。FPD生成路径并提取这些路径中的条件。在提取的条件中,一些条件包含PHP变量处理函数(VHF),其中FPD中的求解器不能直接解释和理解变量处理函数。这些函数中的参数可以是变量或数组。FPD可以处理包含静态变量(固定值,如整数、浮点数、双精度数和字符串)的函数。尽管如此,当这些条件包含来自用户的源时,这些条件难以分析(即,超全局变量),其中这些源的值不由系统声明我们将这些功能分为两类。表3描述了两个变量处理函数类别,图5描述了程序中各种VHF类别的流程A 类 : 对 于 那 些 检 查 变 量 值 的 函 数 ( 即 , is_int 、 is_float 、is_bool 、 is_double 、 is_integer 、 in_long 、 is_null 、 is_real 、is_numeric),当路径成功遍历该条件时,这些函数中使用的变量被认为是安全的(路径生成器假定条件结果为TRUE)。另一方面,如果路径生成器没有通过该条件(路径生成器假设条件结果为“0”),则变量可能是易受伤害的,这意味着变量的值不是数字,并且在程序中使用它可能是危险的表2PHP变量处理函数和示例的描述。功能描述示例Category B : 此 类 别 包 含 两 个 ( is_string 和 isset ) 函 数 。 函 数is_string检查变量的值如果它包含字符串。在这种情况下,变量可能易受攻击,因为恶意脚本通常包含特殊字符和字符。当路径生成器成功遍历该条件时,路径生成器假定条件结果为TRUE,并且如果在任何接收语句中使用变量之前没有清理功能,则该变量可能包含漏洞。另一方面,如果路径生成器没有通过该条件(路径生成器假设条件结果为“0”),这意味着变量为空或不包含任何字符,则变量将是安全的根据条件的结果,isset函数只能遵循一条路径。FPD中的路径生成器遍历路径,并且已经遍历过该路径的所有条件和变量都存储在与该路径相关联的数组中。由于静态分析行为无法检查变量的运行时值,因此我们检查isset的变量(参数)与路径中已经遍历过的其他变量。如果变量存在,这意味着条件被认为是真的,变量可能是脆弱的。另一方面,如果函数isset参数变量和已经遍历的变量之间没有相似性,则条件被认为是无效的,因此包含isset并且失败的条件将被认为是该路径的终点,而不继续遍历该路径中的其余操作设计了一种算法来分析包含变量处理函数的条件,并处理被认为是安全的输入。具体来说,我们首先提取函数和函数中的参数(变量)所有的变量都-确定变量是否为空is_bool查找变量是否为布尔if($var))if(is_bool($var))dling函数被视为它们可以遍历除isset函数之外的所有具有与cateif($var)is_double当路径生成器成功is_float查找变量的类型是否为floatis_int查找变量的类型是否为整数if(is_float($var))if(is_int($var))在遍历条件的执行如果路径生成器未能执行条件(遍历与执行条件失败相关的其他路径),则变量可能if($var)= if($var)= if($var)is_long变量的值is_int if(is_long($var))is_null查找变量是否为null if(is_null($var))is_numeric查找变量是否为数字if(is_numeric($var))或数字字符串if($var)is_real($var)包含恶意脚本。因此,标记为未知的应该稍后通过污点分析来分析另一方面,is_string函数可以遍历所有条件分支。但是,条件中具有与类别B相关的is_string的变量被标记is_string查找变量的类型是否为stringisset确定是否声明了变量与nullif($var))if($var)当路径生成器成功遍历条件的执行时(这意味着该函数的参数是字符串,可能容易被使用),将其设置为Unknown。如果路径生成器-erator无法执行条件(遍历与执行条件失败相关),则变量被标记为安全,因为该变量的类型不是字符串,并且它表3变量处理函数类别。类别函数参数执行状态dation vulnerabilities.FPD存储所有分析的变量及其输入。一旦获取了isset函数,就会执行回溯过程,以检查该变量是否存在于FPD分析过的存储变量中。如果变量存在并且已经被分析,则FPD将成功地遍历路径,并且该函数的参数将被标记为未知,这可能具有不确定性。如果FPD未能找到变量,路径生成器将在此时停止遍历此路径,将此路径标记为终止,并开始遍历新路径。污染分析在控制流的持续时间内监视污染/未污染类别系统●●一emptyis_boolis_double安全安全安全is_floatis_intis_integeris_longis_nullis_numeric是真实的安全安全安全安全安全安全Bis_string未知isset未知A.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报689算法1. 变量处理函数算法报告一个漏洞,当一个可能受污染的源变量被采用,而没有验证敏感(接收)代码。FPD遍历PHP源代码,并识别每个路径中与sink和sanitizerPHP源代码(输入表达式)使用全局$_GET,$_POST,$_REQUEST,$_COOKIE,$_SESSION,$_SERVER和$_FILES。因此,在本发明中,它们可能包含恶意脚本,如果它们到达一个接收器语句,并且变量没有使用适当的清理方法进行清理。对于XSS漏洞的情况,所有攻击类型都有相关的关键字,攻击者可以更改这些关键字来实施攻击。这些关键字被操纵以使代码具有恶意,然后用于多个攻击。确定注入代码的类型提供了关于攻击识别和预防的清晰理解。具有漏洞的输入验证漏洞(XSS和SQLi)每种脆弱性类型的源、汇和清理功能如表4所示。4.1.1. 跨站点脚本检测FPD遍历源代码以产生可用于分析程序流的最小SSA表示。SSA表单中的每个块代表源代码的一个属性。这些属性包括用于污点分析的源、接收器和净化函数。OWASP(OWASP,2021)是一个基于互联网的论坛,提供免费提供的技术,文档,知识,软件和有关Web应用程序安全方面的技术。OWASP XSS备忘单系列项目提出了一系列规则,以在不同的上下文中正确地清理或避免不可信的输入,以防止XSS攻击。因此,从理论上讲,XSS问题得到了解决。A.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报690图五.在VHF流程序中有不同的分类。表4每个漏洞的源、汇和清理功能的类别脆弱性关键词来源汇消毒剂XSS$_POST$_GET$_请求echoprintprintfhtmlspecialcharshtmlentities urlencode$_文件$_COOKIE$_SERVERSHTTP_GET_VARSHTTP_POST_VARSHTTP_COOKIE_VARSHTTP_REQUEST_VARSfprintffile_put_contentsfile_get_contentsfgetsfgetcfscanf剥离标签preg_replaceSQLi或$_POSTmysql查询mysql_real_escape_string联盟$_GETmysqli查询mysql_escape_stringDROPTRUNCATE SELECT更新$_请求$_文件$_COOKIE$_SERVERSHTTP_GET_VARSmysqli_executemysqli::querymysql_db_querymysqli::real_escape_stringmysqli_escape_stringmysqli_real_escape_stringmysqli::escape_string插入HTTP_POST_VARS喜欢转换HTTP_COOKIE_VARSHTTP_REQUEST_VARS我们使用OWASP XSS预防规则(OWASP,2021)来检查源代码中的用户输入是否使用适当的清理功能进行了清理。我们的污点分析方法中使用的规则如下所示:规则1:在HTML元素中保存不可信信息之前进行HTML编码。恶意脚本可能会被注入到用户输入中的HTML标记体示例:span>XSS恶意脚本/span>在上面的示例代码中,恶意脚本存在于span HTML标记的主体中。因此,标准的清理功能可以帮助避免用户输入并保证其安全。规则2:在公共HTML属性中保存不可信信息之前进行属性编码。HTML属性(即,类型、名称、值、href、src等)如果用户输入被打印在属性值内,则可能存在漏洞。在这种情况下,所有以正常文本开头,以“= 00“或”= 0“或未加引号结尾的属性都示例:input attr●●A.W. Marashdih,Z.F. Zaaba和K. 苏韦斯沙特国王大学学报691规则3:在HTML URL变量中保存不可信信息之前进行URL编码。通过使用HTTP链接作为参数,可以将值传输到另一个页面但是,
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功