CN114912122A - 一种基于双向推理的固件接口变量追踪方法 - Google Patents
一种基于双向推理的固件接口变量追踪方法 Download PDFInfo
- Publication number
- CN114912122A CN114912122A CN202210594344.4A CN202210594344A CN114912122A CN 114912122 A CN114912122 A CN 114912122A CN 202210594344 A CN202210594344 A CN 202210594344A CN 114912122 A CN114912122 A CN 114912122A
- Authority
- CN
- China
- Prior art keywords
- variable
- interface
- source code
- function
- input
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 98
- 230000002457 bidirectional effect Effects 0.000 title claims abstract description 19
- 238000004458 analytical method Methods 0.000 claims abstract description 45
- 230000004044 response Effects 0.000 claims description 46
- 230000008569 process Effects 0.000 claims description 33
- 238000012545 processing Methods 0.000 claims description 33
- 239000000523 sample Substances 0.000 claims description 18
- 238000005206 flow analysis Methods 0.000 claims description 12
- 230000008859 change Effects 0.000 claims description 8
- 238000003780 insertion Methods 0.000 claims description 7
- 230000037431 insertion Effects 0.000 claims description 7
- 238000012795 verification Methods 0.000 claims description 7
- 230000000295 complement effect Effects 0.000 claims description 5
- 238000010276 construction Methods 0.000 claims description 5
- 230000000977 initiatory effect Effects 0.000 claims description 4
- 230000003993 interaction Effects 0.000 claims description 4
- 238000003672 processing method Methods 0.000 claims description 3
- 238000012216 screening Methods 0.000 claims description 3
- 238000013461 design Methods 0.000 abstract description 9
- 238000009412 basement excavation Methods 0.000 abstract description 4
- 238000001914 filtration Methods 0.000 abstract description 4
- 238000005516 engineering process Methods 0.000 description 6
- 238000004088 simulation Methods 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000004807 localization Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000010206 sensitivity analysis Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/572—Secure firmware programming, e.g. of basic input output system [BIOS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Earth Drilling (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于双向推理的固件接口变量追踪方法,从对源代码的分析推理、以及程序执行的真实结果推理两个方向,实现了对固件web接口中使用变量执行路径的追踪,进而获得了可被访问者实际控制的用户输入参数、传播路径、对应的取值范围、以及最后的输出内容;方案设计不仅可以通过追踪在前端中自执行的参数,检测反射型跨站脚本漏洞等前端过滤不严导致的安全问题,提高web漏洞挖掘的效率,还可以为后续的二进制污点分析工作提供有效支撑,降低污点分析的误报率等,进而提升信息安全工作者对固件的分析能力。
Description
技术领域
本发明涉及一种基于双向推理的固件接口变量追踪方法,属于信息安全技术领域。
背景技术
随着物联网、工业互联网、智能制造、智能家居等信息技术热门领域的迅猛发展,数字基础设施中的智能硬件设备正在高速增长,这些设备的信息安全问题也随着物联网的普及暴露在外,成为被攻击的目标。许多物联网设备都支持用户通过网页实现对设备的快速配置,因此web安全仍然是固件安全中的重要一环,也是开发人员和安全分析人员关注的重点。但与传统web安全有所不同的是,固件本身不具备程序的运行环境,每个固件的开发都是针对相应的硬件设备能够正常使用,使得在获得固件后,固件中的程序也不能够轻易被执行和访问,这也对安全分析人员提出了更高的要求。
目前对固件web服务执行程序的安全分析技术主要包含模拟仿真技术、污点分析技术等。模拟仿真技术是指通过纯软件的手法模拟硬件web服务的启动过程,然后结合模糊测试的方法对其进行分析有,但物联网设备中的参数多数储存在硬件设备中,不以文件形式保存在固件当中,且固件中的二进制程序相互依赖,在缺少物理设备的情况下对物联网设备的服务程序进行模拟仿真变得尤为困难。污点分析技术通常是对二进制文件中的危险函数及其调用路径的分析,但大多数危险函数的使用仅是程序自身或者多个二进制程序中的闭环逻辑,对于危险函数是否真实存在漏洞,是否能被访问者真实触发,还需要大量的人工筛查。
不同于web安全必须拥有对应的权限才可以访问页面,在IOT安全中,大部分设备的前端源代码可以从固件中完全提取,这为源代码分析和插桩提供了有利条件。然而现有的自动代码审计工具往往从定位危险函数开始,逐层检测代码的合规性和缺陷,针对的是在后端执行的源代码,无法直接应用于前端源码的分析。更重要的是,现有的分析工具大部分都不能确认危险函数可以由用户的输入控制以及触发,使得分析结果的误报率较高。因此,需要一种判断前端变量是否由用户控制,并且最终输入后端的变量追踪方法。
发明内容
本发明所要解决的技术问题是提供一种基于双向推理的固件接口变量追踪方法,从源码推理和程序执行推理两个方向,实现对固件web接口中使用变量执行路径的追踪,提升信息安全工作者对固件的分析能力。
本发明设计了一种基于双向推理的固件接口变量追踪方法,用于针对固件文件的接口变量进行追踪,包括如下步骤:
步骤A.通过文件类型、后缀名、以及文件路径,获得固件文件中涉及web服务的前端源码,并进入步骤B;
步骤B.通过控制流分析,获得前端源码的控制流图,然后对前端源码进行分解,获得用户接口Iu和程序接口Ip分别所涉及的参数处理函数,并依据控制流图,迭代分解出各参数处理函数所涉及各类型子变量分别对应的参数传播路径S(v),再进入步骤C;其中,用户接口Iu是指用户通过浏览器访问,能够读取和写入的途径和内容;程序接口Ip是指web服务的客户端与服务端之间的信息交互方法,v表示变量;
步骤C.根据所获各类型子变量分别对应的参数传播路径S(v),通过数据流分析,获得自用户接口输入起、经过程序接口、最终从用户接口输出整个过程中所涉及各阶段的处理函数方法,然后进入步骤D;
步骤D.针对步骤C所获各阶段处理函数方法涉及到的接口要素E进行整理,获得基于前端源码推理的变量追踪结果r,然后进入步骤E;
步骤E.针对前端源码的副本进行源代码插桩操作,获得插桩后前端源码,然后进入步骤F;
步骤F.基于预设web服务端,以及插桩后前端源码在浏览器上的执行,对插桩后前端源码中用户接口Iu的访问,通过插桩点的反馈值,记录插桩后前端源码在用户接口Iu至程序接口Ip的执行顺序Ou;然后访问前端源码的用户接口Iu、并在到达程序接口后,将处理所获程序接口的输出Ip_out作为请求送入预设推理机中,由推理机构造相应固件服务针对所接收程序接口的输出Ip_out请求进行响应,再由推理机将所获程序接口的输入Ip_in响应输送至插桩后前端源码进行处理,并反馈推理机,通过插桩点的反馈值,记录插桩后前端源码在程序接口Ip至用户接口Iu的执行顺序Op,然后进入步骤G;
步骤G.针对Ou与Op进行筛选,获得彼此间执行顺序完全一致的结果,即获得基于事实推理的变量追踪结果r',然后进入步骤H;
步骤H.针对基于前端源码推理的变量追踪结果r与基于事实推理的变量追踪结果r'进行相互验证,若验证通过,则将该变量追踪结果放入接口要素的确定集R中;若验证未通过,则变量追踪结果r与变量追踪结果r'放入接口要素的补充集R'中,即实现对固件文件的接口变量进行追踪。
作为本发明的一种优选技术方案:所述步骤C包括如下步骤C1至步骤C3;
步骤C1.根据所获各类型子变量分别对应的参数传播路径S(v),通过数据流分析,获得用户接口输入处理函数IuEres、向程序接口的输出函数IpErep、程序接口接收返回值的函数位置IpEpath、以及该接收返回值的函数的代码片段,然后进入步骤C2;其中,Eres表示接收输入的格式和方法函数,Erep表示发起输出的格式和方法函数,Epath表示接口的地址或路径函数;
步骤C2.针对该接收返回值的函数的代码片段进行语义分析,获得该接收返回值的函数,进而获得从程序接口输入的变量处理方法IpEres、以及出现判断错误的方法IpEsta,然后进入步骤C3;Esta表示判断输入输出有无出错的方法函数;
步骤C3.根据控制流图,获取到最终从用户接口输出的函数IuEreq,即获得自用户接口输入起、经过程序接口、最终从用户接口输出整个过程中所涉及各阶段的处理函数方法,然后进入步骤D。
作为本发明的一种优选技术方案:所述步骤D中的接口要素E包括接收输入的格式和方法函数Eres、发起输出的格式和方法函数Erep、接口的地址或路径函数Epath、判断输入输出有无出错的方法函数Esta。
作为本发明的一种优选技术方案:所述步骤C至步骤D获得基于前端源码推理的变量追踪结果r的过程中,若对于给定变量v0,若存在Iu_in(v0)→IuEres(v0)+IpEreq(v0)→Ip_out(v0')和Ip_in(v0”)→IpEres(v0”)+IuEreq(v0”)→Iu_out(v0”'),则通过前端源码推理对该变量v0的追踪结果,用并集表示为r0=∪{IuEres(v0)+IpEreq(v0)}+∪{IuEres(v0”)+IpEreq(v0”)},其中,v0'表示变量v0经函数处理后的变量,v0”表示变量v0'经函数处理后的变量,v0”'表示变量v0”经函数处理后的变量。
作为本发明的一种优选技术方案:所述步骤F至步骤G获得基于事实推理的变量追踪结果r'的过程中,通过执行用户接口的请求,得到向程序接口的输入Ip_in,再动态的修改程序接口对前端源码的输出Ip_out,记录在前端源码中插桩点返回的实际信息,通过反馈的信息得到每个输入在前端源码中流经的代码分支和代码片段,最终得到关于变量v0的代码执行顺序O(v0),由用户接口输入开始的代码执行流定义为Ou(v0),由程序接口输入开始的代码执行流定义为Op(v0),则输入输出的对应关系为Iu_in(v0)→Ou(v0)→Ip_out(v0')和Ip_in(v0”)→Op(v0”)→Iu_out(v0”'),获得基于事实推理对变量v0的追踪结果的并集r'0=∪Ou(v0)+∪Op(v0)。
作为本发明的一种优选技术方案:所述步骤H中,基于Ou(v0)=IuEres(v0)+IpEreq(v0和Op(v”0)=IpEres(v0”)+IuEreq(v0”),对于变量v0追踪结果的确定集,应用交集表示为R0=r0∩r'0,补充集应用并集表示为R0'=r0∪r'0。
作为本发明的一种优选技术方案:所述步骤F中,将处理所获程序接口的输出Ip_out作为请求送入预设推理机中,由推理机构造相应固件服务针对所接收程序接口的输出Ip_out请求进行响应,包括如下各响应:
响应1.收到正确程序接口的输入Ip_in响应,且数据包带有参数信息,记录该响应内容,然后修改程序接口的输出Ip_out请求数据包中的变量v0进行重放,跟踪不同请求获得的不同响应结果,并将结果作为程序接口输入Ip_in(v0)发送给插桩后前端源码,根据插桩探针的反馈观察前端的执行情况,并将执行顺序Op(v0)作为追踪结果;
响应2.收到正确响应,但数据包参数的值为空值,则根据前端源码分析中所获得的判断条件构造响应,使构造响应能够满足判断条件,然后再转发至插桩后的前端源码,根据探针反馈进行深度优先的迭代构造,将反馈路径最深的预设个数不同执行路径作为追踪结果Op(v0);
响应3.收到错误响应或请求超时,则推理机以上述两种响应包作为模板,根据前端源码分析的结果,将判断条件作为依据,同时根据前端源码的上下文分析,获得条件判断前变量的变化过程得到实际的键值对,重复响应2中的迭代过程,记录所有不一样的反馈结果,并将其作为追踪结果Op(v0)。
本发明所述一种基于双向推理的固件接口变量追踪方法,采用以上技术方案与现有技术相比,具有以下技术效果:
本发明所设计一种基于双向推理的固件接口变量追踪方法,从对源代码的分析推理、以及程序执行的真实结果推理两个方向,实现了对固件web接口中使用变量执行路径的追踪,进而获得了可被访问者实际控制的用户输入参数、传播路径、对应的取值范围、以及最后的输出内容;方案设计不仅可以通过追踪在前端中自执行的参数,检测反射型跨站脚本漏洞等前端过滤不严导致的安全问题,提高web漏洞挖掘的效率,还可以为后续的二进制污点分析工作提供有效支撑,降低污点分析的误报率等,进而提升信息安全工作者对固件的分析能力。
附图说明
图1是本发明设计中变量追踪的始点和终点位置的示意图;
图2是本发明设计的双向推理的基本流程图;
图3是本发明设计基于前端源码分析的流程图;
图4是本发明设计基于事实推理固件服务接口内容的流程图。
具体实施方式
下面结合说明书附图,对本发明的具体实施方式作进一步详细的说明。
本发明通过双向推理的方法从对源代码的分析推理和程序执行的真实结果推理两个方向实现了对固件web接口中使用变量执行路径的追踪,进而获得了可被访问者实际控制的用户输入参数、传播路径、对应的取值范围以及最后的输出内容。不仅可以通过追踪在前端中自执行的参数,检测反射型跨站脚本漏洞等前端过滤不严导致的安全问题,提高web漏洞挖掘的效率,还可以为后续的二进制污点分析工作提供有效支撑,降低污点分析的误报率等,进而提升信息安全工作者对固件的分析能力。
在本发明的具体设计中,固件接口是指固件提供的web服务的用户接口Iu和程序接口Ip,即I=(Iu,Ip)。用户接口Iu是指用户通过浏览器访问,能够读取和写入的途径和内容;程序接口Ip是指web服务的客户端与服务端之间的信息交互方法。
接口要素是指包括接口的地址或路径Epath、发起输出的格式和方法Ereq、接收输入的格式和方法Eres以及判断输入输出有无出错的发方法Esta。
接口变量是指参数v是指在程序执行中经过固件接口I的变量名。
参数传播路径S(v)是指描述前端代码接收一个来自用户接口Iu_in输入,经过函数处理后再从程序接口Ip_out发出,再接收程序接口Ip_out的返回值,最终从用户接口Iu_out输出的完整过程。则有S(v)={Iu_in(v),Ip_out(v'),Ip_in(v”),Ip_out(v”')},因接口功能不同,有些过程会少于上述的四个步骤。变量追踪是指在参数传播路径中,每个输入和输出参数在代码中经过的运算处理和条件判断的各自合集。
双向推理是指基于源码推理和基于事实推理两种分析手段,最终达成源码推理结果和事实推理结果一致,得到固件接口变量的追踪结果。其中源码推理更注重参数变化细节以及代码内部的运行轨迹,即(Eres+Ereq)的处理逻辑;事实推理更注重接口输出的结果以及在程序外部修改输入Iu_in(v)和Ip_in(v)中参数v对结果Ip_out和Iu_out的影响。
基于源码推理是指通过对源代码分析,定位用户接口的输入点IuEpath后选择变量,然后分析变量的传播路径S(v),每个参数在代码中经过的运算处理和条件判断的各自合集。对于给定参数v0,若有Iu_in(v0)→IuEres(v0)+IpEreq(v0)→Ip_out(v0')和Ip_in(v0”)→IpEres(v0”)+IpEreq(v0”)→Iu_out(v0”'),则通过源码推理对该变量的追踪结果可以用并集表示为r0=∪{IuEres(v0)+{IuEreq(v0)}+∪{{IuEres(v0”)+IpEreq(v0”)}。
基于事实推理是指通过执行用户接口的请求,得到向程序接口输入的内容Ip_in,再动态的修改对程序接口对前端的输出Ip_out,观察和记录在前端中插桩点返回的实际信息,通过反馈的信息得到每个输入在源代码中流经的代码分支和代码片段,最终得到关于变量v0的代码执行顺序O(v0),由用户接口输入开始的代码执行流定义为Ou(v0),由程序接口输入开始的代码执行流定义为Op(v0),则输入输出的对应关系为Iu_in(v0)→Ou(v0)→Ip_out(v0')和Ip_in(v0”)→Op(v0”)→Iu_out(v0”')。同样可得到事实推理得到的对v0的追踪结果的并集r'0=∪Ou(v0)+∪Op(v0)。
变量追踪结果R是指源码推理和事实推理结果的相互验证,即在推理正确的条件下有Ou(v0)=IuEres(v0)+IpEreq(v0)和Op(v”0)=IpEres(v0”)+IuEreq(v0”),因此对于变量v0的追踪结果的确定集可用交集表示为R0=r0∩r'0,补充集可以用并集表示为R0'=r0∪r'0。
如图1所示,变量追踪可分为两个部分,第一部分是以用户接口输入Iu_in作为锚点,提取用户接口输入后赋值的变量v,带入之后的数学计算、条件判断、循环、字符变换、编码等函数处理后得到并从程序接口输出Ip_out的这一过程,记为Iu→Ip。第二部分是以程序接口输入Ip_in为锚点,经过函数处理后向用户接口输出Iu_out的过程,记为Ip→Iu。在源码推理中,当在程序接口输出的同时,定义了接受返回值的变量、函数,或者接受数据的路径时,就可以将两个部分合并为一次变量追踪结果。在事实推理中,当推理机接受到任意请求并得出正确响应则,即认为是对变量v的一次变量追踪结果。
如图2所示,整个变量追踪过程包括预处理、源码推理和事实推理,实际应用当中,具体执行如下步骤A至步骤H。
步骤A.通过文件类型、后缀名、以及文件路径,获得固件文件中涉及web服务的前端源码,并进入步骤B。
上述步骤A即预处理,实际应用中,首先根据文件路径,筛选/www和/web目录下的所有文件,然后根据后缀名筛选所有“.htm*”、“.js”、“.php”、“.asp”、“.jsp”为后缀名的文本文件,将所有筛选到的文件,按目录层级合并至同一文件夹下。
步骤B.通过控制流分析,获得前端源码的控制流图,然后对前端源码进行分解,获得其中用户接口Iu和程序接口Ip分别所涉及的参数处理函数,并依据控制流图,迭代分解出各参数处理函数所涉及各类型子变量分别对应的参数传播路径S(v),再进入步骤C;
其中,用户接口Iu是指用户通过浏览器访问,能够读取和写入的途径和内容;程序接口Ip是指web服务的客户端与服务端之间的信息交互方法,v表示变量。
上述步骤B即针对前端源码进行分析,通过控制流分析,抽象出前端源码运行时的执行序列,将顺序执行的代码片段解释为一个个过程块,将条件判断语句(if-else),条件选择语句(switch-case)抽象为决策点,根据决策生成分支子路径并按分支继续向下衍生。以此生成包含所有参数的传播路径、及子传播路径的控制流图,如图3所示。在控制流图中,选择与外部数据交互的过程块,根据流向将控制流分解为用户接口输入Iu→Ip和程序接口输入Ip→Iu两类。在记录所有参数传播路径的同时,将所有决策语句中的判断条件提取出来作为后续构造响应Ip_in的依据。
参数传播路径完成上述处理后,将基于源码推理和基于事实推理两种分析手段开展双向推理,其中源码推理更注重参数变化细节以及代码内部的传播路径,事实推理更注重接口输出的结果以及在程序外部修改参数对结果的影响。
步骤C.根据所获各类型子变量分别对应的参数传播路径S(v),通过数据流分析,获得自用户接口输入起、经过程序接口、最终从用户接口输出整个过程中所涉及各阶段的处理函数方法,然后进入步骤D。
实际应用中,上述步骤C具体包括执行如下步骤C1至步骤C3。
步骤C1.根据所获各类型子变量分别对应的参数传播路径S(v),通过数据流分析,获得用户接口输入处理函数IuEres、向程序接口的输出函数IpErep、程序接口接收返回值的函数位置IpEpath、以及该接收返回值的函数的代码片段,然后进入步骤C2;其中,Eres表示接收输入的格式和方法函数,Erep表示发起输出的格式和方法函数,Epath表示接口的地址或路径函数。
步骤C2.针对该接收返回值的函数的代码片段进行语义分析,获得该接收返回值的函数,进而获得从程序接口输入的变量处理方法IpEres、以及出现判断错误的方法IpEsta,然后进入步骤C3;Esta表示判断输入输出有无出错的方法函数。
步骤C3.根据控制流图,获取到最终从用户接口输出的函数IuEreq,即获得自用户接口输入起、经过程序接口、最终从用户接口输出整个过程中所涉及各阶段的处理函数方法,然后进入步骤D。
步骤D.针对步骤C所获各阶段处理函数方法涉及到的接口要素E进行整理,获得基于前端源码推理的变量追踪结果r,然后进入步骤E;这里的接口要素E即包括接收输入的格式和方法函数Eres、发起输出的格式和方法函数Erep、接口的地址或路径函数Epath、判断输入输出有无出错的方法函数Esta。
上述步骤C至步骤D即执行源码推理。具体方式为,获取预处理中所有的参数传播路径的控制流图,然后通过数据流分析的方法对控制流图进行遍历;首先根据控制流图反映的程序,运行路径推断程序运行时在关键执行点上的数据流值的分布情况和变化特征,进而分析出每个变量的初始化情况、在每个程序执行点被引用的状态和可能的结果,进而得到每个变量从控制流图入口节点出发,沿所有可能的执行路径运动最终达到控制流图出口时的值集,即输出变量的取值范围。
在源码推理中Iu→Ip的中间过程可以表示为Iu_in→IuEres+IpEreq→Ip_out。根据控制流图的末尾节点的过程块可以定位到Iu→Ip过程中程序接口的输出函数Ip_out,对该函数的上下文进行语义分析,分析出用户接口输出的内容格式IpEreq,并继续向上回溯接收函数的入口IuEpath和接收方法IuEres。再根据控制流图分析出接收返回值Ip_in的接口位置IpEpath。同理,Ip→Iu的中间过程可以表示为Ip_in→IpEres+IuEreq→Iu_out,使用相同的方法可得到IuEreq和IpEres。
分析变量的传播路径S(v),每个参数在代码中经过的运算处理和条件判断的各自合集。对于给定变量v0,其传播路径为S(v0)={Iu_in(v0),Ip_out(v0'),Ip_in(v0”),Ip_out(v0”')},且由上可得Iu_in(v0)→IuEres(v0)+IpEreq(v0)→Ip_out(v0')和Ip_in(v0”)→IpEres(v0”)+IuEreq(v0”)→Iu_out(v0”'),则对其源码推理得到变量v0的追踪结果r0可用合集表示为,r0=∪{IuEres(v0)+IpEreq(v0)}+∪{IpEres(v0”)+IpEreq(v0”)}。
在数据流图中,用数据流值表示程序点可能观察到的所有程序状态的集合,数据流值在每程序节点s的前后分别记为In[S]与Out[S],由于每个输入节点都可能来自多个不同的前驱节点,在采用前向数据分析的条件下,可用方程式表示,其中fs为传递函数,i为路径。通过迭代便利控制流图,在每个节点处对方程式反复求值,使得方程组的解到达定值。到达定值是指一个定值可以从生成的节点,沿着某条路径到达某个节点且在途中未被杀死,当所有的到达定值被解得,则完成了数据流图的分析,同时也获得了参数在程序中的执行路径和值的可能范围。
设计中,数据流分析使用路径敏感分析,即不仅考虑语句的先后顺序,还对程序执行路径条件加以判断,以确定分析使用的语句序列是否对应着一条可实际运行的程序执行路径。并且上下文敏感,考虑函数之间的数据流,对不同调用位置调用的同一函数加以区分,跟踪分析目标数据在函数之间的传递过程。
步骤E.针对前端源码的副本进行源代码插桩操作,获得插桩后前端源码,然后进入步骤F。
步骤F.如图4所示,基于预设web服务端,以及插桩后前端源码在浏览器上的执行,对插桩后前端源码中用户接口Iu的访问,通过插桩点的反馈值,记录插桩后前端源码在用户接口Iu至程序接口Ip的执行顺序Ou;然后访问前端源码的用户接口Iu、并在到达程序接口后,将处理所获程序接口的输出Ip_out作为请求送入预设推理机中,由推理机构造相应固件服务针对所接收程序接口的输出Ip_out请求进行响应,再由推理机将所获程序接口的输入Ip_in响应输送至插桩后前端源码进行处理,并反馈推理机,通过插桩点的反馈值,记录插桩后前端源码在程序接口Ip至用户接口Iu的执行顺序Op,然后进入步骤G。
实际应用当中,这里步骤F将处理所获程序接口的输出Ip_out作为请求送入预设推理机中,由推理机构造相应固件服务针对所接收程序接口的输出Ip_out请求进行响应,包括如下各响应。
响应1.收到正确程序接口的输入Ip_in响应,且数据包带有参数信息,记录该响应内容,然后修改程序接口的输出Ip_out请求数据包中的变量v0进行重放,跟踪不同请求获得的不同响应结果,并将结果作为程序接口输入Ip_in(v0)发送给插桩后前端源码,根据插桩探针的反馈观察前端的执行情况,并将执行顺序Op(v0)作为追踪结果。
响应2.收到正确响应,但数据包参数的值为空值,则根据前端源码分析中所获得的判断条件构造响应,使构造响应能够满足判断条件,然后再转发至插桩后的前端源码,根据探针反馈进行深度优先的迭代构造,将反馈路径最深的预设个数不同执行路径作为追踪结果Op(v0)。
响应3.收到错误响应或请求超时,则推理机以上述两种响应包作为模板,根据前端源码分析的结果,将判断条件作为依据,同时根据前端源码的上下文分析,获得条件判断前变量的变化过程得到实际的键值对,重复响应2中的迭代过程,记录所有不一样的反馈结果,并将其作为追踪结果Op(v0)。
步骤G.针对Ou与Op进行筛选,获得彼此间执行顺序完全一致的结果,即获得基于事实推理的变量追踪结果r',然后进入步骤H。
上述步骤E至步骤G即执行事实推理。具体方式为,在完成前端源码分析后,复制前端源码,并进行前端源码插桩,插桩的目的是在程序动态执行时,采集程序的执行状态信息,从而进行基于事实推理。插桩方法使用分支覆盖探针,即首先根据前端源码中的参数传播路径,解析出所有分支语句的程序段,在每个分支的开始和结束处植入一个程序探针,在分支程序被执行的同时也会使得探针程序被执行,分支下的探针执行后会首先通过一个全局变量的计数来标明此探针的执行序号,以此来记录所有探针及分支的实际逻辑顺序,然后探针程序会收集分支程序的最终执行情况,例如变量的定义、返回和调用等信息,最终将分支探针所收集到的信息发送给推理机。推理机将根据探针序号,整理出本次代码执行的过程,并通过信息汇总得出执行代码的输入参数内容以及输出参数内容。
在得到插桩后的代码之后,搭建一个web服务端使得插桩后的代码可以被正常访问并且在浏览器中正常加载执行。然后遍历访问用户接口Iu,使得发送请求生成Iu_in,并在程序接口输出Ip_out。在事实推理中Iu→Ip的中间过程可以表示为Iu_in→Ou→Ip_out;Ip→Iu的中间过程可以表示为Ip_in→Op→Iu_out,O代表从插桩点反馈的代码执行顺序。Ou可以在遍历访问用户接口Iu_in时获得。
在遍历用户接口Iu时,需要先根据源码文件目录生成路径字典,然后对每个路径的对应文件进行模糊测试,通过计算基本块覆盖数体现模糊测试的代码覆盖率,当代码覆盖率较低时,还可以通过在浏览器中随机提交表单信息的方式增加模糊测试的样例,从而达到遍历大多数用户接口的目的。通过遍历前端用户接口发起的Iu_in,前端处理后得到Ip_out并将请求发送到推理机,推理机先记录该请求,再将Ip_out转发至固件服务,如图4所示。
在图4中,固件的服务接口是指通过固件模拟手段执行的后端程序,固件的服务依赖文件是指后端程序执行需要但实际上存放在真实硬件设备中,在固件中无法获得的依赖项。当这些请求到达时后端的其他程序可能出现程序奔溃或返回空值等问题,在则认为是错误响应。
对于给定参数v0,当推理机每发出一个Ip_out请求后,会根据不同的响应内容做出不同策略:
(1).收到正确Ip_in响应,且数据包带有参数信息。记录响应内容,然后修改请求数据包中的参数v0进行重放,跟踪不同请求获得的不同响应结果,并将结果作为程序接口输入Ip_in(v0)发送给插桩后的源代码,根据插桩探针的反馈观察前端的执行情况,并将执行顺序Op(v0)作为追踪结果。
(2).收到正确响应,但数据包参数的值为空值。此时需要根据源代码分析中所获得的判断条件构造响应,尝试使构造响应能够满足判断条件,然后再转发至插桩后的源代码,根据探针反馈进行深度优先的迭代构造,将反馈路径最深的5个不同执行路径作为追踪结果Op(v0)。
(3).收到错误响应或请求超时。推理机以上述两种响应包作为模板,根据源代码分析的结果,不仅需要将判断条件作为依据,还需要根据源代码的上下文分析得到条件判断前参数的变化过程得到实际的键值对,重复(2)中的迭代过程,记录所有不一样的反馈结果并将其作为追踪结果Op(v0)。
实际应用当中,上述步骤E至步骤G通过执行用户接口的请求,得到向程序接口的输入Ip_in,再动态的修改程序接口对前端源码的输出Ip_out,记录在前端源码中插桩点返回的实际信息,通过反馈的信息得到每个输入在前端源码中流经的代码分支和代码片段,最终得到关于变量v的代码执行顺序O(v)。对于特定变量v0,将由用户接口输入开始的代码执行流定义为Ou(v0),由程序接口输入开始的代码执行流定义为Op(v0),则输入输出的对应关系为Iu_in(v0)→Ou(v0)→Ip_out(v0')和Ip_in(v0”)→Op(v0”)→Iu_out(v0”'),最终获得基于事实推理对变量v0的追踪结果,可用并集表示为r'0=∪Ou(v0)+∪Op(v0)。
步骤H.针对基于前端源码推理的变量追踪结果r与基于事实推理的变量追踪结果r'进行相互验证,若验证通过,则将该变量追踪结果放入接口要素的确定集R中;若验证未通过,则变量追踪结果r与变量追踪结果r'放入接口要素的补充集R'中,即实现对固件文件的接口变量进行追踪。
实际应用中,变量追踪结果R是指源码推理和事实推理结果的相互验证,若推理正确,则从两个方向推理出对v0的处理代码顺序应一致。根据Iu→Ip和Ip→Iu的中间过程的表示方法,在推理正确的条件下有Ou(v0)=IuEres(v0)+IpEreq0)和Op(v”0)=IpEres(v0”)+IuEreq(v0”),对于变量v0追踪结果的确定集可用交集表示为R0=r0∩r'0,补充集可用并集表示为R0'=r0∪r'0。确定集是变量从用户接口输入后的变化过程,即对变量追踪得到的最终结果,补充集则是变量追踪中发现的不完整的路径,也具有一定的参考意义。
上述技术方案所设计一种基于双向推理的固件接口变量追踪方法,从源码推理和事实推理两种分析手段进行双向推理,实现了对固件web接口中使用变量执行路径的追踪,进而获得了可被访问者实际控制的用户输入参数、传播路径、对应的取值范围、以及最后的输出内容;方案设计不仅可以通过追踪在前端中自执行的参数,检测反射型跨站脚本漏洞等前端过滤不严导致的安全问题,提高web漏洞挖掘的效率,还可以为后续的二进制污点分析工作提供有效支撑,降低污点分析的误报率等,进而提升信息安全工作者对固件的分析能力。
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。
Claims (7)
1.一种基于双向推理的固件接口变量追踪方法,用于针对固件文件的接口变量进行追踪,其特征在于,包括如下步骤:
步骤A.通过文件类型、后缀名、以及文件路径,获得固件文件中涉及web服务的前端源码,并进入步骤B;
步骤B.通过控制流分析,获得前端源码的控制流图,然后对前端源码进行分解,获得用户接口Iu和程序接口Ip分别所涉及的参数处理函数,并依据控制流图,迭代分解出各参数处理函数所涉及各类型子变量分别对应的参数传播路径S(v),再进入步骤C;其中,用户接口Iu是指用户通过浏览器访问,能够读取和写入的途径和内容;程序接口Ip是指web服务的客户端与服务端之间的信息交互方法,v表示变量;
步骤C.根据所获各类型子变量分别对应的参数传播路径S(v),通过数据流分析,获得自用户接口输入起、经过程序接口、最终从用户接口输出整个过程中所涉及各阶段的处理函数方法,然后进入步骤D;
步骤D.针对步骤C所获各阶段处理函数方法涉及到的接口要素E进行整理,获得基于前端源码推理的变量追踪结果r,然后进入步骤E;
步骤E.针对前端源码的副本进行源代码插桩操作,获得插桩后前端源码,然后进入步骤F;
步骤F.基于预设web服务端,以及插桩后前端源码在浏览器上的执行,对插桩后前端源码中用户接口Iu的访问,通过插桩点的反馈值,记录插桩后前端源码在用户接口Iu至程序接口Ip的执行顺序Ou;然后访问前端源码的用户接口Iu、并在到达程序接口后,将处理所获程序接口的输出Ip_out作为请求送入预设推理机中,由推理机构造相应固件服务针对所接收程序接口的输出Ip_out请求进行响应,再由推理机将所获程序接口的输入Ip_in响应输送至插桩后前端源码进行处理,并反馈推理机,通过插桩点的反馈值,记录插桩后前端源码在程序接口Ip至用户接口Iu的执行顺序Op,然后进入步骤G;
步骤G.针对Ou与Op进行筛选,获得彼此间执行顺序完全一致的结果,即获得基于事实推理的变量追踪结果r',然后进入步骤H;
步骤H.针对基于前端源码推理的变量追踪结果r与基于事实推理的变量追踪结果r'进行相互验证,若验证通过,则将该变量追踪结果放入接口要素的确定集R中;若验证未通过,则变量追踪结果r与变量追踪结果r'放入接口要素的补充集R'中,即实现对固件文件的接口变量进行追踪。
2.根据权利要求1所述一种基于双向推理的固件接口变量追踪方法,其特征在于:所述步骤C包括如下步骤C1至步骤C3;
步骤C1.根据所获各类型子变量分别对应的参数传播路径S(v),通过数据流分析,获得用户接口输入处理函数IuEres、向程序接口的输出函数IpErep、程序接口接收返回值的函数位置IpEpath、以及该接收返回值的函数的代码片段,然后进入步骤C2;其中,Eres表示接收输入的格式和方法函数,Erep表示发起输出的格式和方法函数,Epath表示接口的地址或路径函数;
步骤C2.针对该接收返回值的函数的代码片段进行语义分析,获得该接收返回值的函数,进而获得从程序接口输入的变量处理方法IpEres、以及出现判断错误的方法IpEsta,然后进入步骤C3;Esta表示判断输入输出有无出错的方法函数;
步骤C3.根据控制流图,获取到最终从用户接口输出的函数IuEreq,即获得自用户接口输入起、经过程序接口、最终从用户接口输出整个过程中所涉及各阶段的处理函数方法,然后进入步骤D。
3.根据权利要求2所述一种基于双向推理的固件接口变量追踪方法,其特征在于:所述步骤D中的接口要素E包括接收输入的格式和方法函数Eres、发起输出的格式和方法函数Erep、接口的地址或路径函数Epath、判断输入输出有无出错的方法函数Esta。
4.根据权利要求2所述一种基于双向推理的固件接口变量追踪方法,其特征在于:所述步骤C至步骤D获得基于前端源码推理的变量追踪结果r的过程中,若对于给定变量v0,若存在Iu_in(v0)→IuEres(v0)+IuEres(v0)→Ip_out(v0')和Ip_in(v0”)→IpEres(v0”)+IuEreq(v0”)→Iu_out(v0”'),则通过前端源码推理对该变量v0的追踪结果,用并集表示为r0=∪{IuEres(v0)+IpEreq(v0)}+∪{IuEres(v0”)+IpEreq(v0”)},其中,v0'表示变量v0经函数处理后的变量,v0”表示变量v0'经函数处理后的变量,v0”'表示变量v0”经函数处理后的变量。
5.根据权利要求2所述一种基于双向推理的固件接口变量追踪方法,其特征在于:所述步骤F至步骤G获得基于事实推理的变量追踪结果r'的过程中,通过执行用户接口的请求,得到向程序接口的输入Ip_in,再动态的修改程序接口对前端源码的输出Ip_out,记录在前端源码中插桩点返回的实际信息,通过反馈的信息得到每个输入在前端源码中流经的代码分支和代码片段,最终得到关于变量v0的代码执行顺序O(v0),由用户接口输入开始的代码执行流定义为Ou(v0),由程序接口输入开始的代码执行流定义为Op(v0),则输入输出的对应关系为Iu_in(v0)→Ou(v0)→Ip_out(v0')和Ip_in(v0”)→Op(v0”)→Iu_out(v0”'),获得基于事实推理对变量v0的追踪结果的并集r'0=∪Ou(v0)+∪Op(v0)。
6.根据权利要求5所述一种基于双向推理的固件接口变量追踪方法,其特征在于:所述步骤H中,基于Ou(v0)=IuEres(v0)+IpEreq(v0)和Op(v″0)=IpEres(v0”)+IuEreq(v0”),对于变量v0追踪结果的确定集,应用交集表示为R0=r0∩r'0,补充集应用并集表示为R0'=r0∪r′0。
7.根据权利要求1所述一种基于双向推理的固件接口变量追踪方法,其特征在于:所述步骤F中,将处理所获程序接口的输出Ip_out作为请求送入预设推理机中,由推理机构造相应固件服务针对所接收程序接口的输出Ip_out请求进行响应,包括如下各响应:
响应1.收到正确程序接口的输入Ip_in响应,且数据包带有参数信息,记录该响应内容,然后修改程序接口的输出Ip_out请求数据包中的变量v0进行重放,跟踪不同请求获得的不同响应结果,并将结果作为程序接口输入Ip_in(v0)发送给插桩后前端源码,根据插桩探针的反馈观察前端的执行情况,并将执行顺序Op(v0)作为追踪结果;
响应2.收到正确响应,但数据包参数的值为空值,则根据前端源码分析中所获得的判断条件构造响应,使构造响应能够满足判断条件,然后再转发至插桩后的前端源码,根据探针反馈进行深度优先的迭代构造,将反馈路径最深的预设个数不同执行路径作为追踪结果Op(v0);
响应3.收到错误响应或请求超时,则推理机以上述两种响应包作为模板,根据前端源码分析的结果,将判断条件作为依据,同时根据前端源码的上下文分析,获得条件判断前变量的变化过程得到实际的键值对,重复响应2中的迭代过程,记录所有不一样的反馈结果,并将其作为追踪结果Op(v0)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210594344.4A CN114912122B (zh) | 2022-05-27 | 2022-05-27 | 一种基于双向推理的固件接口变量追踪方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210594344.4A CN114912122B (zh) | 2022-05-27 | 2022-05-27 | 一种基于双向推理的固件接口变量追踪方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114912122A true CN114912122A (zh) | 2022-08-16 |
CN114912122B CN114912122B (zh) | 2024-06-14 |
Family
ID=82768347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210594344.4A Active CN114912122B (zh) | 2022-05-27 | 2022-05-27 | 一种基于双向推理的固件接口变量追踪方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114912122B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013222306A (ja) * | 2012-04-16 | 2013-10-28 | Vri Inc | 行動支援システム及びプログラム |
CN104766012A (zh) * | 2015-04-09 | 2015-07-08 | 广东电网有限责任公司信息中心 | 基于动态污点追踪的数据安全动态检测方法及系统 |
CN105190590A (zh) * | 2013-02-28 | 2015-12-23 | 埃尔瓦有限公司 | 用于管理数据的方法和系统和/或用于设备的服务 |
CN109002721A (zh) * | 2018-07-12 | 2018-12-14 | 南方电网科学研究院有限责任公司 | 一种信息安全漏洞的挖掘分析方法 |
-
2022
- 2022-05-27 CN CN202210594344.4A patent/CN114912122B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013222306A (ja) * | 2012-04-16 | 2013-10-28 | Vri Inc | 行動支援システム及びプログラム |
CN105190590A (zh) * | 2013-02-28 | 2015-12-23 | 埃尔瓦有限公司 | 用于管理数据的方法和系统和/或用于设备的服务 |
CN104766012A (zh) * | 2015-04-09 | 2015-07-08 | 广东电网有限责任公司信息中心 | 基于动态污点追踪的数据安全动态检测方法及系统 |
CN109002721A (zh) * | 2018-07-12 | 2018-12-14 | 南方电网科学研究院有限责任公司 | 一种信息安全漏洞的挖掘分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114912122B (zh) | 2024-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Babić et al. | Fudge: fuzz driver generation at scale | |
Jin et al. | Service candidate identification from monolithic systems based on execution traces | |
Gethers et al. | Using relational topic models to capture coupling among classes in object-oriented software systems | |
KR20190041912A (ko) | 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램 | |
Zhang et al. | {APICraft}: Fuzz driver generation for closed-source {SDK} libraries | |
Sacramento et al. | Web application model generation through reverse engineering and UI pattern inferring | |
Zhong et al. | An empirical study on API parameter rules | |
Kang et al. | A preliminary evaluation of llm-based fault localization | |
Tiwari et al. | Production monitoring to improve test suites | |
Zhu et al. | Mocksniffer: Characterizing and recommending mocking decisions for unit tests | |
Daniele et al. | Fuzzers for stateful systems: Survey and Research Directions | |
Briem et al. | Using distributed representation of code for bug detection | |
Sotgiu et al. | Explainability-based debugging of machine learning for vulnerability discovery | |
Shokri et al. | Arcode: Facilitating the use of application frameworks to implement tactics and patterns | |
Silva et al. | GUI inspection from source code analysis | |
Cheng et al. | Slicing ATL model transformations for scalable deductive verification and fault localization | |
Kirinuki et al. | Automating end-to-end web testing via manual testing | |
CN114912122A (zh) | 一种基于双向推理的固件接口变量追踪方法 | |
Hu et al. | SolDetector: Detect Defects Based on Knowledge Graph of Solidity Smart Contract. | |
Heras et al. | ACL2 (ml): Machine-Learning for ACL2 | |
CN114462043A (zh) | 基于强化学习的Java反序列化漏洞检测系统及方法 | |
Leithner et al. | CHIEv: concurrent hybrid analysis for crawling and modeling of web applications | |
Halim et al. | Static code analyzer for detecting web application vulnerability using control flow graphs | |
Boghdady et al. | An enhanced technique for generating hybrid coverage test cases using activity diagrams | |
Yan et al. | A survey of human-machine collaboration in fuzzing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |