CN113901459A - 固件内部二进制程序脆弱性发现方法及装置 - Google Patents
固件内部二进制程序脆弱性发现方法及装置 Download PDFInfo
- Publication number
- CN113901459A CN113901459A CN202110989563.8A CN202110989563A CN113901459A CN 113901459 A CN113901459 A CN 113901459A CN 202110989563 A CN202110989563 A CN 202110989563A CN 113901459 A CN113901459 A CN 113901459A
- Authority
- CN
- China
- Prior art keywords
- binary
- keywords
- program
- binary program
- firmware
- 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
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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
-
- 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
-
- 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)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种固件内部二进制程序脆弱性发现方法、装置、电子设备及存储介质,包括:收集漏洞报告,并确定关键字和存在漏洞的二进制程序名称;确定分析目标,并基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;建立二进制程序的程序控制流图,并确定二进制程序关系依赖图;提取潜在关键字,并根据潜在关键字确定满足条件的潜在关键字作为关键字;建立完备的二进制程序关系依赖图,基于所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。本发明能够有效和自动化地发现嵌入式设备固件中间接与用户交互的内部二进制程序实现过程中存在的漏洞。
Description
技术领域
本发明涉及网络安全技术领域,尤其涉及一种固件内部二进制程序脆弱性发现方法及装置。
背景技术
物联网设备在智能家居和工业生产中发挥着越来越重要的作用。据估计,到2025年,正在使用的物联网设备数量将达到16.44亿。物联网设备给现代生活带来便利和效率的同时,也带来了重大的网络安全隐患。Mirai僵尸网络、VPNFilter病毒和Stuxnet病毒已经证明了对现实世界的物联网设备攻击所能产生的影响。
主动发现物联网设备中的脆弱性并及时修复是应对风险重要的防护手段。固件是嵌入式设备运行的核心。其定义是“硬件设备和计算机指令或计算机数据的组合,这些指令或数据作为只读软件驻留在硬件设备上”。一般来说,一个固件包含约2000个组件(如二进制文件、脚本文件、HTML文件等),并为嵌入式设备提供多种功能(如网络通信功能、设备专用功能等)。其中运行在物联网设备上的固件中的可执行二进制程序漏洞是攻击的根本原因,二进制程序漏洞严重影响设备的机密性、可用性和可靠性。
厂商通常不会在固件中公开可执行二进制文件的源代码。此外,可执行二进程程序的执行与底层硬件设计密切相关,因此,传统软件动态分析技术难以应用。而且动态分析受限于执行环境和具体测试用例,在实际使用中会存在很多漏报。而静态分析只关注于固件中单个二进制文件的分析,通过对二进制程序进行反汇编分析数据流或控制流来检查程序中的脆弱性。但是静态分析结果存在很高的误报率,因为检测到的脆弱点不一定是外部用户可控的。污点分析通过标识网络接收数据或文件读取数据为污点源,然后分析污点数据的传播是否存在危险操作。目前污点分析对与用户交互的二进程程序分析中取得不错得效果,但应用于固件其它二进制程序时会面临污点引入源未知而造成的漏报问题,以及污点数据约束收集和消毒处理不全面而导致的误报问题。
发明内容
针对现有技术中存在的问题,本发明实施例提供一种固件内部二进制程序脆弱性发现方法及装置。
第一方面,本发明实施例提供一种固件内部二进制程序脆弱性发现方法,包括:
S1、确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;
S2、根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;
S3、提取目标固件的文件系统,作为分析样本;
S4、基于所述二进制程序名称和所述分析样本进行匹配,确定与所述分析样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;
S5、基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;
S6、基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;
S7、基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;
S8、基于所述程序控制流图,确定与所述关键字对应的潜在关键字;
S9、基于所述潜在关键字,搜索所述分析样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;
S10、重复实施S5~S9的步骤,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;
S11、基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。
进一步地,确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告,具体包括:
确定目标固件厂商,并通过网络爬虫收集与所述目标固件厂商相关的漏洞报告。
进一步地,根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称,具体包括:
根据所述漏洞报告使用正则表达式进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称。
进一步地,基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图,具体包括:
基于所述程序控制流图,通过进程通信范式进行特征匹配确定二进制程序关系依赖图。
进一步地,还包括:
在通过进程通信范式进行特征匹配确定二进制程序关系依赖图的同时,确定所述关键字在使用时的身份;其中,身份包括设定者或读取者。
进一步地,基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现,具体包括:
基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现,当数据引入函数依赖于所述关键字引入数据时,标识对应的数据存储区域为污点源;通过符号执行进行路径探索搜集约束信息,在搜索过程中遇到消毒函数则对污点数据进行消毒处理;当遇到汇聚函数时检查输入参数是否存在危险使用的情况,如果存在则记录危险信息。
进一步地,基于所述程序控制流图,确定与所述关键字对应的潜在关键字,具体包括:
基于所述程序控制流图,提取所述关键字的引用函数在父函数中引入的其它字符串作为与所述关键字对应的潜在关键字。
第二方面,本发明实施例提供了一种固件内部二进制程序脆弱性发现装置,包括:
收集模块,用于确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;
第一确定模块,用于根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;
提取模块,用于提取目标固件的文件系统,作为分析样本;
第二确定模块,用于基于所述二进制程序名称和所述分析样本进行匹配,确定与所述分析样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;
第三确定模块,用于基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;
第一建立模块,用于基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;
第四确定模块,用于基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;
第五确定模块,用于基于所述程序控制流图,确定与所述关键字对应的潜在关键字;
搜索模块,用于基于所述潜在关键字,搜索所述分析样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;
第二建立模块,用于重复实施第三确定模块至搜索模块,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;
脆弱性发现模块,用于基于第二建立模块中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。
第三方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上第一方面所述的固件内部二进制程序脆弱性发现方法的步骤。
第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上第一方面所述的固件内部二进制程序脆弱性发现方法的步骤。
由上述技术方案可知,本发明实施例提供的固件内部二进制程序脆弱性发现方法及装置,通过收集漏洞报告,并确定关键字和存在漏洞的二进制程序名称;确定分析目标,并基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;建立二进制程序的程序控制流图,并确定二进制程序关系依赖图;提取潜在关键字,并根据潜在关键字确定满足条件的潜在关键字作为关键字;建立完备的二进制程序关系依赖图,基于所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。本发明能够有效和自动化地发现嵌入式设备固件中间接与用户交互的内部二进制程序实现过程中存在的漏洞。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的固件内部二进制程序脆弱性发现方法的流程示意图;
图2为本发明一实施例提供的固件内部二进制程序脆弱性发现装置的结构示意图;
图3为本发明一实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。下面将通过具体的实施例对本发明提供的固件内部二进制程序脆弱性发现方法进行详细解释和说明。
图1为本发明一实施例提供的固件内部二进制程序脆弱性发现方法的流程示意图;如图1所示,该方法包括:
步骤S1:确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;
S2、根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;
S3、提取目标固件的文件系统,作为分析样本;
S4、基于所述二进制程序名称和所述分析样本进行匹配,确定与所述分析样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;
S5、基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;
S6、基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;
S7、基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;
S8、基于所述程序控制流图,确定与所述关键字对应的潜在关键字;
S9、基于所述潜在关键字,搜索所述分析样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;
S10、重复实施S5~S9的步骤,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;
S11、基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。
在本实施例中,需要说明的是,为了能有效地发现嵌入式设备固件中间接与用户交互的二进制程序的脆弱性,需要一套专门针对固件内多个二进制程序关联分析的脆弱性分析方法(即本发明实施例提供的固件内部二进制程序脆弱性发现方法)。
本发明实施例针对物联网设备固件中多个可执行二进制程序提出一种基于关键字(如与漏洞触发相关的变量名称、如潜在关键字)敏感的脆弱性发现方法,尤其是针对间接与用户交互的二进制程序。如通过关键字符串和进程通信范式建立固件中多个二进制程序控制流图关系并形成二进制程序依赖关系图,然后标识与关键字相关的数据引入函数为污点源,再通过符号执行技术收集污点数据的执行约束关系并在需要时进行消毒处理,最后根据设定的汇聚点函数判断污点数据是否会进行危险使用,从而有效发现嵌入式设备固件中间接与用户交互的二进制程序的脆弱性。
本发明能够解决传统脆弱性分析工具应用于间接与用户交互二进制程序时面临的漏报率和误报率高的问题,达到有效发现嵌入式设备固件中间接与用户交互的二进制程序的脆弱性中存在安全缺陷的目的。
本发明实施例涉及的方法流程包括:关键字与分析目标收集阶段、目标二进制程序关系建立及关键字扩充阶段以及关键字敏感的数据流分析阶段。(1)关键字与分析目标收集阶段:如通过网络爬虫收集公开的漏洞报告,并利用自然语言处理技术提取与漏洞触发相关的关键变量名称和漏洞存在的二进制程序名称做为初始线索;(2)目标二进制程序关系建立及线索扩展阶段:如利用固件提取工具对待分析固件样本的文件系统提取,然后基于第一阶段获得的初始线索,确定需要分析的二进制程序目标,再根据进程间通信方式(例如环境变量、共享内存、套接字)特征建立通信范式查找器,利用通信范式查找器分析相同关键字在不同二进程程序中是否存在关联关系并建立二进制依赖图,同时利用函数特征进一步搜集关键字并确定与固件中其它二进程程序的关系。(3)关键字敏感的数据流分析阶段:如标记与用户输入相关的函数为污点引入函数,当依赖于关键字引入数据时则标记对应的内存区域为污点数据,然后基于二进制程序依赖关系图进行跨文件的约束信息收集及消毒工作,再根据设定的汇聚点函数(例如内存赋值函数、命令执行函数)检查输入参数,如果存在污点数据的危险使用则生成预警信息。本发明实施例针对嵌入式设备固件中间接与用户交互的二进制程序,达到了有效发现其实现过程中存在安全缺陷的目的。
具体的,举例来说:步骤1,通过爬虫或人工收集网络上针对分析目标固件厂商的公开漏洞报告。
步骤2,利用步骤1中得到报告,通过正则表达式匹配与漏洞触发关联的变量名称以及二进程程序名称做为线索。
步骤3,利用步骤2中得到的二进程程序名称,匹配从固件样本中提取得到的文件系统中的二进制程序做为分析目标。
步骤4,利用步骤2中得到的关键字及步骤3中得到的二进制程序,确定关键字在二进制程序中直接使用和间接使用的位置。
步骤5,利用步骤4中得到的关键字使用位置,建立中间语言表达方式并建立程序控制流图。
步骤6,利用步骤5中得到的程序控制流图,通过内存共享、环境变量和套接字等进程通信范式进行特征匹配确定二进制程序关系依赖图,同时确定关键字使用时的身份(设定者或获取者)。
步骤7,利用步骤5中得到的程序控制流图,提取已有关键字引入函数在父函数中引入的其它字符串做为潜在关键字。
步骤8,利用步骤7中得到的潜在关键字,搜索固件样本中所有其它二进制文件是否存在使用情况,如果存在多个二进制文件共享使用相同字符串的情况,则将字符串做为新关键字,二进制做为待分析目标。
步骤9,重复步骤4,步骤5,步骤6,步骤7,步骤8继续利用关键字对二进制程序进行分析建立完备的二进制程序依赖图直到没有待分析的关键字为止。
步骤10,利用步骤9生成的所有二进制程序依赖图和所使用的所有关键字,当数据引入函数依赖于关键字引入数据时(设置者),标识对应的存储区域为污点源;并通过符号执行进行路径探索搜集执行约束信息,在搜索过程中遇到消毒函数对污点数据进行消毒;当遇到汇聚函数时检查输入参数是否存在危险使用的情况,如果存在则记录危险信息。
在上述实施例基础上,还可以做如下改进。
优选的,在所述步骤1中,通过网络爬虫收集公开的漏洞报告并在步骤2中用正则表达式提取关键字和二进制名称做为线索。收集线索的具体来源包括但不限于网络公开报告,还可以通过固件中的文本文件、人工分析等获取感兴趣的字符串或二进制文件做为线索进行分析。
优选的,在所述步骤3中,利用网络上公开的固件分析工具例如binwalk可以完成固件中文件系统提取的工作。该过程中可能会遇到文件系统提取失败的情况,对于这些固件,需要结合人工分析对文件格式或加密算法进行分析后提取文件系统。
优选的,在所述步骤6中,通过进程通信范式来搭建不同二进制程序之间的关联关系。进程的通信方式包括但不限于环境变量、套接字、共享内存、共享文献、信号量等。
本发明实施例用以解决传统静态脆弱性分析方法应用于嵌入式设备固件内间接与用户交互的二进程程序时产生的高漏报率和高误报率的问题;以及静态分析方法应用于二进制分析时,间接调用的恢复不足导致的高漏报率,实现了有效发现嵌入式设备固件中间接与用户交互的可执行二进制程序存在的安全缺陷的目的。
由上面技术方案可知,本发明实施例提供的固件内部二进制程序脆弱性发现方法,通过S1、确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;S2、根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;S3、提取所述目标固件厂商的固件,作为固件样本;S4、基于所述二进制程序名称和所述固件样本进行匹配,确定与所述固件样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;S5、基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;S6、基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;S7、基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;S8、基于所述程序控制流图,确定与所述关键字对应的潜在关键字;S9、基于所述潜在关键字,搜索所述固件样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;S10、重复实施S5~S9的步骤,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;S11、基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。本发明能够有效和自动化地发现嵌入式设备固件中间接与用户交互的内部二进制程序实现过程中存在的漏洞。
在上述实施例的基础上,在本实施例中,确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告,具体包括:
确定目标固件厂商,并通过网络爬虫收集与所述目标固件厂商相关的漏洞报告。
在上述实施例的基础上,在本实施例中,根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称,具体包括:
根据所述漏洞报告使用正则表达式进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称。
在本实施例中,举例来说:在CVE漏洞报告CVE-2020-10215中描述:“An issue wasdiscovered on D-Link DIR-825Rev.B 2.10devices.They allow remote attackers toexecute arbitrary commands via the dns_query_name parameter in a dns_query.cgi POST request.TRENDnet TEW-632BRP 1.010B32 is also affected.”我们通过匹配横杠(-)、下划线(_)、句号(.)等标点符号可以提取到dns_query_name做为关键字,存在漏洞的二进制程序名称dns_query.cgi。
在上述实施例的基础上,在本实施例中,基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图,具体包括:
基于所述程序控制流图,通过进程通信范式进行特征匹配确定二进制程序关系依赖图。
在本实施例中,举例来说:通过环境变量的形式,文件A中会使用setenv("dns_query_name",data)来设置环境变量dns_query_name的值为data;在文件B中会通过query=getenv("dns_query_name")来获取环境变量dns_query_name的值进行进一步处理
在上述实施例的基础上,在本实施例中,还包括:通过共享文件的形式,通过共享内存的形式。
在通过进程通信范式进行特征匹配确定二进制程序关系依赖图的同时,确定所述关键字在使用时的身份;其中,身份包括设定者或读取者。
在本实施例中,针对确定所述关键字在使用时的身份,需要说明的是,确定使用身份的目的是确定数据的传播方向,例如在文件A中通过setenv设置该关键字的值,在文件B或C中通过getenv读取该关键字的值,则数据分析的方向应该是从A文件的setenv处开始。
在上述实施例的基础上,在本实施例中,基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现,具体包括:
基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现,当数据引入函数依赖于所述关键字引入数据时,标识对应的数据存储区域为污点源;通过符号执行进行路径探索搜集约束信息,在搜索过程中遇到消毒函数则对污点数据进行消毒处理;当遇到汇聚函数时检查输入参数是否存在危险使用的情况,如果存在则记录危险信息。
在上述实施例的基础上,在本实施例中,基于所述程序控制流图,确定与所述关键字对应的潜在关键字,具体包括:
基于所述程序控制流图,提取所述关键字的引用函数在父函数中引入的其它字符串作为与所述关键字对应的潜在关键字。
在本实施例中,举例来说:在父函数中会使用其它变量进行处理,例如devName、devType、priority等。然后搜索这些字符串是否会被文件系统中的其它可执行二进制程序使用,如果使用则判断是否可以通过进程通信范式匹配与当前文件存在通信关系。如果确定存在共享使用关系,则将对应的字符串当做关键字,对应的二进程程序当做分析对象等待进一步处理分析。
为了更好的理解本发明,下面结合实施例进一步阐述本发明的内容,但本发明不仅仅局限于下面的实施例。
为有效发现嵌入式设备内间接与用户交互的二进制程序的安全缺陷,解决传统脆弱性分析工具针对间接与用户交互二进制程序存在的漏报率和误报率高的问题,以及针对二进制程序静态分析过程中由于间接调用、别名分析等造成的无法构建从程序执行开始至结束完整数据流的问题。本发明实施例提出一种固件内部二进制程序脆弱性发现方法,主要用于发现固件中间接与用户交互的二进制程序的漏洞,本发明实施例解决了能够在真实环境下的商业产品中发现了多个之前未知的漏洞,具有较强的使用价值。
用户通过HTTP请求与httpd可执行二进制程序直接交互,在达到一定条件下,httpd将会通过环境变量的形式传递参数并调用cgibin程序,cgibin间接与用户交互。在cgibin中环境变量CONTENT_TYPE得长度没有受到约束,因此在strcpy中存在缓冲区溢出风险。如果我们之单独分析cgibin程序并将所有的getenv函数引入的数据设为污点,则会因为环境变量可能在其它二进制程序中进行约束而造成误报,此外还可能由于一些环境变量不是由用户定义而设系统设置的而造成误报。
一种固件内部二进制程序脆弱性发现方法。主要是先通过线索收集确定需要分析的关键字和二进制程序名称,这些目标的分析意义相比于固件中其它二进制程序更高;然后利用关键字和进程间通信范式建立固件内多个二进程程序之间的关联依赖关系,同时利用函数特征进一步发掘潜的没有被网络收集得到的关键字和二进制程序关系;最后在得到的二进制关系依赖图和关键字的基础上进行污点分析,利用符号执行进行约束的收集,通过设定的污点源、消毒器和汇聚点判断是否存在数据危险使用的情况,具体包括内存破坏型漏洞和命令注入型漏洞。
具体地:
a)对于给定的固件厂商,使用网络爬虫收集公开的漏洞报告。
b)利用步骤a)中得到的报告,使用正则表达式匹配与漏洞触发相关的变量名称和漏洞存在的二进制名称做为初始线索。
c)利用步骤b)中的二进制名称,匹配与使用固件分析提取工具获得的文件系统中的二进制可执行程序做为分析目标。
d)利用步骤b)中得到的关键字和步骤c)中得到的分析目标,确定关键字在二进制程序中直接使用和间接使用的位置。
e)利用步骤d)中关键字使用位置,使用中间语言建立二进制程序的程序控制流图。
f)利用步骤e)中得到的程序控制流图,通过内存共享、环境变量和套接字等进程通信范式进行特征匹配确定二进制程序关系依赖图,同时确定关键字使用时的身份。
g)利用步骤e)中得到的程序控制流图,提取当前关键字引入函数在父函数中引入的其它字符串做为潜在关键字。
h)利用步骤g)中得到的潜在关键字,搜索固件样本中所有其它二进制文件是否存在使用情况,如果存在多个二进制文件共享使用相同字符串的情况,则将字符串做为新关键字,二进制做为待分析目标。
i)重复步骤d,步骤e,步骤f,步骤g,步骤h继续利用关键字对二进制程序进行分析建立完备的二进制程序依赖图直到没有待分析的关键字为止。
j)利用步骤i)生成的所有二进制程序依赖图和所使用的所有关键字,当数据引入函数依赖于关键字引入数据时(设置者),标识对应的存储区域为污点源;并通过符号执行进行路径探索搜集执行约束信息,在搜索过程中遇到消毒函数对污点数据进行消毒;当遇到汇聚函数时检查输入参数是否存在危险使用的情况,如果存在则记录危险信息。
图2为本发明一实施例提供的固件内部二进制程序脆弱性发现装置的结构示意图,如图2所示,该装置包括:收集模块201、第一确定模块202、提取模块203、第二确定模块204、第三确定模块205、第一建立模块206、第四确定模块207、第五确定模块208、搜索模块209、第二建立模块210和脆弱性发现模块211,其中:
其中,收集模块201,用于确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;
第一确定模块202,用于根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;
提取模块203,用于提取目标固件的文件系统,作为分析样本;
第二确定模块204,用于基于所述二进制程序名称和所述分析样本进行匹配,确定与所述分析样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;
第三确定模块205,用于基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;
第一建立模块206,用于基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;
第四确定模块207,用于基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;
第五确定模块208,用于基于所述程序控制流图,确定与所述关键字对应的潜在关键字;
搜索模块209,用于基于所述潜在关键字,搜索所述分析样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;
第二建立模块210,用于重复实施第三确定模块至搜索模块,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;
脆弱性发现模块211,用于基于第二建立模块中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。
本发明实施例提供的固件内部二进制程序脆弱性发现装置具体可以用于执行上述实施例的固件内部二进制程序脆弱性发现方法,其技术原理和有益效果类似,具体可参见上述实施例,此处不再赘述。
基于相同的发明构思,本发明实施例提供一种电子设备,参见图3电子设备具体包括如下内容:处理器301、通信接口303、存储器302和通信总线304;
其中,处理器301、通信接口303、存储器302通过通信总线304完成相互间的通信;通信接口303用于实现各建模软件及智能制造装备模块库等相关设备之间的信息传输;处理器301用于调用存储器302中的计算机程序,处理器执行计算机程序时实现上述各方法实施例所提供的方法,例如,处理器执行计算机程序时实现下述步骤:S1、确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;S2、根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;S3、提取目标固件的文件系统,作为分析样本;S4、基于所述二进制程序名称和所述分析样本进行匹配,确定与所述分析样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;S5、基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;S6、基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;S7、基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;S8、基于所述程序控制流图,确定与所述关键字对应的潜在关键字;S9、基于所述潜在关键字,搜索所述分析样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;S10、重复实施S5~S9的步骤,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;S11、基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。
基于相同的发明构思,本发明又一实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法实施例提供的方法,例如,S1、确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;S2、根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;S3、提取目标固件的文件系统,作为分析样本;S4、基于所述二进制程序名称和所述分析样本进行匹配,确定与所述分析样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;S5、基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;S6、基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;S7、基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;S8、基于所述程序控制流图,确定与所述关键字对应的潜在关键字;S9、基于所述潜在关键字,搜索所述分析样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;S10、重复实施S5~S9的步骤,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;S11、基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,
服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
此外,在本发明中,诸如“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
此外,在本发明中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
此外,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种固件内部二进制程序脆弱性发现方法,其特征在于,包括:
S1、确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;
S2、根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;
S3、提取目标固件的文件系统,作为分析样本;
S4、基于所述二进制程序名称和所述分析样本进行匹配,确定与所述分析样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;
S5、基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;
S6、基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;
S7、基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;
S8、基于所述程序控制流图,确定与所述关键字对应的潜在关键字;
S9、基于所述潜在关键字,搜索所述分析样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;
S10、重复实施S5~S9的步骤,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;
S11、基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。
2.根据权利要求1所述的固件内部二进制程序脆弱性发现方法,其特征在于,确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告,具体包括:
确定目标固件厂商,并通过网络爬虫收集与所述目标固件厂商相关的漏洞报告。
3.根据权利要求1所述的固件内部二进制程序脆弱性发现方法,其特征在于,根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称,具体包括:
根据所述漏洞报告使用正则表达式进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称。
4.根据权利要求1所述的固件内部二进制程序脆弱性发现方法,其特征在于,基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图,具体包括:
基于所述程序控制流图,通过进程通信范式进行特征匹配确定二进制程序关系依赖图。
5.根据权利要求4所述的固件内部二进制程序脆弱性发现方法,其特征在于,还包括:
在通过进程通信范式进行特征匹配确定二进制程序关系依赖图的同时,确定所述关键字在使用时的身份;其中,身份包括设定者或读取者。
6.根据权利要求1所述的固件内部二进制程序脆弱性发现方法,其特征在于,基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现,具体包括:
基于步骤S10中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现,当数据引入函数依赖于所述关键字引入数据时,标识对应的数据存储区域为污点源;通过符号执行进行路径探索搜集约束信息,在搜索过程中遇到消毒函数则对污点数据进行消毒处理;当遇到汇聚函数时检查输入参数是否存在危险使用的情况,如果存在则记录危险信息。
7.根据权利要求1所述的固件内部二进制程序脆弱性发现方法,其特征在于,基于所述程序控制流图,确定与所述关键字对应的潜在关键字,具体包括:
基于所述程序控制流图,提取所述关键字的引用函数在父函数中引入的其它字符串作为与所述关键字对应的潜在关键字。
8.一种固件内部二进制程序脆弱性发现装置,其特征在于,包括:
收集模块,用于确定目标固件厂商,并收集与所述目标固件厂商相关的漏洞报告;
第一确定模块,用于根据所述漏洞报告进行匹配,确定关键字和存在漏洞的二进制程序名称;其中,所述关键字为与漏洞触发相关的变量名称;
提取模块,用于提取目标固件的文件系统,作为分析样本;
第二确定模块,用于基于所述二进制程序名称和所述分析样本进行匹配,确定与所述分析样本对应的文件系统中的二进制程序,并将所述二进制程序作为分析目标;
第三确定模块,用于基于所述关键字和所述分析目标,确定关键字在二进制程序中直接使用位置和间接使用位置;
第一建立模块,用于基于直接使用位置和间接使用位置,建立二进制程序的程序控制流图;
第四确定模块,用于基于所述程序控制流图,通过特征匹配确定二进制程序关系依赖图;
第五确定模块,用于基于所述程序控制流图,确定与所述关键字对应的潜在关键字;
搜索模块,用于基于所述潜在关键字,搜索所述分析样本中的所有二进制文件,是否存在所述潜在关键字被两个或两个以上的二进制文件同时使用的情况;若存在,则将所述潜在关键字作为关键字,将与所述潜在关键字对应的二进制文件作为待分析目标;若不存在,则跳过所述潜在关键字;
第二建立模块,用于重复实施第三确定模块至搜索模块,利用关键字对二进制程序进行分析,建立二进制程序关系依赖图,直到没有待分析的所述关键字为止;
脆弱性发现模块,用于基于第二建立模块中的所有二进制程序关系依赖图和所有所述关键字完成固件中二进制程序脆弱性发现。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1~7任一项所述的固件内部二进制程序脆弱性发现方法。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1~7任一项所述的固件内部二进制程序脆弱性发现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110989563.8A CN113901459B (zh) | 2021-08-26 | 2021-08-26 | 固件内部二进制程序脆弱性发现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110989563.8A CN113901459B (zh) | 2021-08-26 | 2021-08-26 | 固件内部二进制程序脆弱性发现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113901459A true CN113901459A (zh) | 2022-01-07 |
CN113901459B CN113901459B (zh) | 2023-05-26 |
Family
ID=79188110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110989563.8A Active CN113901459B (zh) | 2021-08-26 | 2021-08-26 | 固件内部二进制程序脆弱性发现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113901459B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115659357A (zh) * | 2022-11-17 | 2023-01-31 | 北京邮电大学 | 基于二进制文件差异的固件漏洞检测方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109525556B (zh) * | 2018-10-18 | 2022-01-11 | 中国电力科学研究院有限公司 | 一种用于确定嵌入式系统固件中协议漏洞的轻量级方法及系统 |
CN111400719B (zh) * | 2020-03-12 | 2023-03-14 | 中国科学院信息工程研究所 | 基于开源组件版本识别的固件脆弱性判别方法及系统 |
-
2021
- 2021-08-26 CN CN202110989563.8A patent/CN113901459B/zh active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115659357A (zh) * | 2022-11-17 | 2023-01-31 | 北京邮电大学 | 基于二进制文件差异的固件漏洞检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113901459B (zh) | 2023-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Lee et al. | A novel method for SQL injection attack detection based on removing SQL query attribute values | |
CN112131882A (zh) | 一种多源异构网络安全知识图谱构建方法及装置 | |
Kamtuo et al. | Machine Learning for SQL injection prevention on server-side scripting | |
US9141806B2 (en) | Mining source code for violations of programming rules | |
CN114077741B (zh) | 软件供应链安全检测方法和装置、电子设备及存储介质 | |
Saccente et al. | Project achilles: A prototype tool for static method-level vulnerability detection of Java source code using a recurrent neural network | |
CN111400719A (zh) | 基于开源组件版本识别的固件脆弱性判别方法及系统 | |
US10043004B2 (en) | Method of correlating static and dynamic application security testing results for a web and mobile application | |
Huang et al. | UChecker: Automatically detecting php-based unrestricted file upload vulnerabilities | |
CN110221977A (zh) | 基于ai的网站渗透测试方法 | |
US20210334371A1 (en) | Malicious File Detection Technology Based on Random Forest Algorithm | |
CN115270131A (zh) | 一种Java反序列化漏洞检测方法及系统 | |
CN111368303A (zh) | 一种PowerShell恶意脚本的检测方法及装置 | |
CN115022026A (zh) | 一种区块链智能合约威胁检测装置及方法 | |
CN113901459B (zh) | 固件内部二进制程序脆弱性发现方法及装置 | |
CN113468524B (zh) | 基于rasp的机器学习模型安全检测方法 | |
Feichtner et al. | Obfuscation-resilient code recognition in Android apps | |
CN111291377A (zh) | 一种应用漏洞的检测方法及系统 | |
CN109670311A (zh) | 基于高级语义的恶意代码分析与检测方法 | |
CN117725592A (zh) | 一种基于有向图注意力网络的智能合约漏洞检测方法 | |
CN116305131B (zh) | 脚本静态去混淆方法及系统 | |
CN116932381A (zh) | 小程序安全风险自动化评估方法及相关设备 | |
CN111190813B (zh) | 基于自动化测试的安卓应用网络行为信息提取系统及方法 | |
CN115499164A (zh) | 一种基于图神经网络的多特征融合区块链智能合约漏洞检测方法、装置、计算机及存储介质 | |
CN114065202A (zh) | 一种恶意代码检测方法、装置、电子设备及存储介质 |
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 |