CN114595449A - 一种安全扫描方法及装置 - Google Patents
一种安全扫描方法及装置 Download PDFInfo
- Publication number
- CN114595449A CN114595449A CN202011300468.4A CN202011300468A CN114595449A CN 114595449 A CN114595449 A CN 114595449A CN 202011300468 A CN202011300468 A CN 202011300468A CN 114595449 A CN114595449 A CN 114595449A
- Authority
- CN
- China
- Prior art keywords
- source code
- static source
- detected
- security
- code
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 151
- 230000003068 static effect Effects 0.000 claims abstract description 211
- 238000004590 computer program Methods 0.000 claims description 6
- 238000002910 structure generation Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 3
- 230000008569 process Effects 0.000 description 40
- 230000006870 function Effects 0.000 description 24
- 238000004891 communication Methods 0.000 description 21
- 238000013461 design Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 17
- 230000014509 gene expression Effects 0.000 description 17
- 238000012545 processing Methods 0.000 description 13
- 238000007726 management method Methods 0.000 description 11
- 230000000875 corresponding effect Effects 0.000 description 10
- 230000009286 beneficial effect Effects 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 5
- 230000007547 defect Effects 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 230000005236 sound signal Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000012544 monitoring process Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 210000001072 colon Anatomy 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 230000004927 fusion Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000000007 visual effect Effects 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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Storage Device Security (AREA)
Abstract
本申请提供了一种安全扫描方法及装置,用以提高安全扫描的准确性。其中,安全扫描方法包括:响应于安全扫描指令,获取被检测静态源代码;根据所述被检测静态源代码中包含的关键语法信息和代码行号信息,对所述被检测静态源代码进行转化得到第一结构表示;其中所述第一结构用于指示所述被检测静态源代码中包含的关键语法信息,且所述第一结构表示中包含各关键语法信息在所述被检测静态源代码中的代码行号信息;基于所述第一结构表示得到对所述被检测静态源代码的流数据表示,所述流数据用于指示所述被检测静态源代码中包含的至少一条逻辑关系;基于所述流数据进行安全扫描。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种安全扫描方法及装置。
背景技术
目前,业界对应用安全的自动化测试提出的技术方案包括静态应用安全测试(static application security testing,SAST),SAST的解决方案为针对静态源代码文件直接进行分析,但在分析的过程中并不是执行静态源代码,而是仅根据静态源代码中的部分特征,确定是否存在安全漏洞。通常SAST的技术方案实现为:根据安全漏洞对具体产生问题的漏洞组件进行分析,通过分析该漏洞组件的特征,提炼出特定的关键信息(包括指纹、关键词、方法名等);然后,基于漏洞的攻击途径,根据漏洞攻击过程中所有防护点的安全加固方法提炼出关键实现(包括方法名、加固组件等);最后,根据上述提炼出的特定的关键信息和关键实现生成一组正则表达式,将该正则表达式用于安全扫描。
虽然在上述技术方案中,对于关键信息和关键实现,可以通过生成正则表达式的方法,较为简单的实现安全扫描,但是存在无法对攻击途径分析的缺点,从而导致无法精准的识别安全漏洞、存在误报高的缺陷。
发明内容
本申请提供一种安全扫描方法及装置,用以更加准确的识别安全漏洞,降低误报问题的产生。
第一方面,提供一种安全扫描方法,该方法包括:响应于安全扫描指令,获取被检测静态源代码;根据所述被检测静态源代码中包含的关键语法信息和代码行号信息,对所述被检测静态源代码进行转化得到第一结构表示;其中所述第一结构用于指示所述被检测静态源代码中包含的关键语法信息,且所述第一结构表示中包含各关键语法信息在所述被检测静态源代码中的代码行号信息;基于所述第一结构表示得到对所述被检测静态源代码的流数据表示,所述流数据用于指示所述被检测静态源代码中包含的至少一条逻辑关系;基于所述流数据进行安全扫描。
该方法的有益效果为:为了解决现有技术中基于静态源代码进行安全扫描存在误报高的缺点,本申请提供的方法中,通过将静态源代码进行转化,根据从静态源代码中分析得到的关键语法信息得到第一结构表示;进一步的,为了实现对攻击途径便捷快速的跟踪和定位,将第一结构表示进一步转化为可以表示逻辑关系的流数据表示,从而在基于流数据实现安全扫描的过程中,可以根据流数据中包含的逻辑关系进行对攻击途径的分析。此外,本申请提供的方法,在对静态源代码进行转化的过程中,还可以解析代码行号信息,进而使得进行转化之后的第一结构携带有被检测静态源代码的代码行号信息,因此在安全扫描之后,还可以根据代码行号信息反推出可能存在安全漏洞的代码属于被检测静态源代码的哪一具体行。通过本申请提供的安全扫描方法,可以提高安全扫描的准确性,降低安全扫描结果中误报问题的产生。
在一种可能的设计中,所述基于所述第一结构表示得到对所述被检测静态源代码的流数据表示,包括:从所述第一结构表示中解析得到多个语法节点,各语法节点具有调用关系和/或被调用关系;基于所述各语法节点的调用关系和/或被调用关系,生成所述被检测静态源代码的第二结构表示;所述第二结构中包含所述被检测静态源代码中多个语法节点的逻辑关系;根据所述第二结构表示得到树状结构表示,所述树状结构用于指示所述被检测静态源代码中多个语法节点的逻辑关系;基于所述树状结构,生成至少一条控制流以及各控制流匹配的数据流;其中,每条控制流用于指示一条逻辑关系;将所述控制流和数据流进行整合,得到所述流数据表示。
该可能的设计的有益效果为:该设计给出了一种基于第一结构得到流数据表示的具体实施方式,通过分析第一结构中包含的各语法节点之间的相互调用关系,从而得到较完善的逻辑关系,并且为了清楚地得到被检测静态源代码中包含的逻辑关系,还可以进一步基于第二结构的树状表示得到至少一条逻辑关系,并将逻辑关系通过控制流来表示,从而提高了计算机对被检测静态源代码的理解能力,在安全扫描的过程中基于流数据中包含的各条控制流和数据流进行安全漏洞的分析,进而提高安全扫描的准确性。
在一种可能的设计中,所述响应于安全扫描指令,获取被检测静态源代码,包括:响应于对静态源代码基线版本的安全扫描指令,将所述静态源代码基线版本作为所述待检测静态源代码;或者,响应于对静态源代码迭代版本的安全扫描指令,且本地存储有对所述静态源代码基线版本的安全扫描结果,获取所述静态源代码迭代版本相对于基线版本变更的代码部分,将所述变更的代码部分作为所述待检测静态源代码;或者,响应于对静态源代码迭代版本的安全扫描指令,且本地存储有对所述静态源代码历史迭代版本的安全扫描结果,获取所述静态源代码迭代版本相对于历史迭代版本变更的代码部分,将所述变更的代码部分作为所述待检测静态源代码。
该可能的设计的有益效果为:该设计中给出了几种确定被检测静态源代码的实施方式,考虑到静态源代码一般具有可以实现基本功能的基线版本和开发人员为了完善或者开发更多功能而进行变更的迭代版本,但对静态源代码可能需要进行多次安全扫描,若每次都对静态源代码的全部代码内容进行安全扫描具有效率低的缺点,因此可以考虑在存在对基线版本或者历史迭代版本进行安全扫描结果时,则可以对变更的代码部分进行安全扫描,从而提高安全扫描的效率,减少安全扫描的时间。
在一种可能的设计中,所述关键语法信息至少包括以下中的一种:类结构、方法结构、继承结构;所述第一结构表示为抽象语法树结构。通过抽象语法树结构对被检测静态源代码中的语法信息进行解析并抽离不重要的细节信息,从而可以提高安全扫描的准确度。
在一种可能的设计中,所述第二结构表示为有向图结构。通过有向图结构表示被检测静态源代码,可以更加清楚的反映被检测静态源代码中包含的逻辑关系。
在一种可能的设计中,基于所述流数据进行安全扫描,包括:基于用于安全扫描的检索关键词对所述流数据进行遍历,所述检索关键词通过安全扫描规则得到;在遍历到所述流数据中存在与所述检索关键词匹配的数据,则表示存在安全漏洞。
该可能的设计的有益效果为:该设计给出了一种进行安全扫描的实施方式,首先基于安全扫描规则得到检索关键词,然后基于检索关键词对流数据形式的被检测静态源代码进行匹配,在存在匹配的数据时,则表示被检测静态源代码可能存在安全漏洞,进而可以基于代码行号信息查找到被检测静态源代码中匹配的数据对应的代码行,并对该代码行的内容进行安全漏洞排查。
第二方面,本申请实施例还提供了一种安全扫描装置,该装置包括执行上述第一方面中任一种可能设计中的方法的模块/单元。这些模块/单元可以通过硬件实现,也可以通过硬件执行相应的软件实现。
第三方面,本申请实施例还提供了一种计算设备,所述计算设备包括处理器和存储器,所述存储器与所述处理器耦合。可选的还包括显示屏。所述处理器执行所述存储器中的程序指令以执行上述第一方面或第一方面任一可能的实现方式提供的方法。所述显示屏用于在所述处理器的触发下向用户显示信息。
第四方面,本申请提供了一种计算设备集群,该计算设备集群包括至少一个如第三方面所提供的计算设备。
第五方面,本申请提供了一种计算机可读存储介质,包括计算机程序指令,所述计算机程序指令被计算设备执行时,以使所述计算设备执行前述第一方面或第一方面的任意可能的实现方式中提供的方法。该存储介质包括但不限于易失性存储器,例如随机访问存储器,非易失性存储器,例如快闪存储器、硬盘(hard disk drive,HDD)、固态硬盘(solidstate drive,SSD)。
第六方面,本申请提供了一种计算机程序产品,所述计算机程序产品包括计算机指令,在所述计算机指令被计算设备执行时,以使所述计算设备执行前述第一方面或第一方面的任意可能的实现方式中提供的方法。该计算机程序产品可以为一个软件安装包,在需要使用前述第一方面或第一方面的任意可能的实现方式中提供的方法的情况下,可以下载该软件安装包到计算设备上,并在计算设备上执行该软件安装包。
第七方面,本申请还提供一种计算机芯片,所述芯片与存储器相连,芯片用于读取并执行存储器中存储的软件程序,以执行前述第一方面或第一方面的任意可能的实现方式中提供的方法。
其中,第二方面至第七方面的有益效果请具体参阅第一方面中各可能的设计的有益效果,在此不再赘述。
附图说明
图1a为相关技术中安全扫描的实现过程;
图1b为本申请实施例提供的一种电子设备的硬件结构的示意图;
图1c为本申请实施例提供的一种电子设备的软件架构的框图;
图1d为本申请实施例提供一种安全扫描方法的应用场景示意图;
图2为本申请实施例提供的一种抽象语法树与有向树的示例图;
图3为本申请实施例提供的一种安全扫描方法的流程示意图;
图4为本申请实施例提供的一种获取被检测静态源代码的前端界面的示意图;
图5为本申请实施例提供的根据AST结构得到流数据的流程示意图;
图6为本申请实施例提供的一种有向树的示意图;
图7a为本申请实施例提供的一种安全扫描方法的结构示意图之一;
图7b为本申请实施例提供的一种安全扫描方法的结构示意图之二;
图7c为本申请实施例提供的一种安全扫描方法的结构示意图之三;
图7d为本申请实施例提供的一种安全扫描方法的结构示意图之四;
图8a为本申请实施例提供的一种安全扫描结果展示列表的前端示意图;
图8b为本申请实施例提供的一种安全扫描结果的示意图;
图9为本申请实施例提供的一种电子设备的示意图。
具体实施方式
随着社会的快速发展,电子设备例如手机越来越普及。电子设备不但具有通信功能、还具有强大的处理能力、存储能力、照相功能等。电子设备通过操作系统(例如安卓操作系统)执行相应的应用程序,用户可以使用电子设备打电话、发短消息、浏览网页、拍照、玩游戏、看视频等。其中,开发人员在通过撰写静态源代码来实现电子设备中的软件应用功能的过程中,难免在静态源代码中会存在一些安全漏洞,从而导致用户在使用电子设备中包含的软件应用过程中的安全性存在严重的潜在风险,因此需要对静态源代码进行安全扫描,用以排查静态源代码中是否存在安全漏洞问题。
结合背景技术的描述,相关技术中存在通过正则表达式的方法实现对静态源代码较为简单的安全扫描方案,参阅图1a所示的内容来说明相关技术的实现过程,在SAST的技术方案中,服务端首先根据对漏洞组件的分析提炼得到的特定的关键信息和关键实现生成一组正则表达式,然后通过该正则表达式对被检测静态源代码进行安全扫描。然而,由于相关技术中仅仅对静态源代码进行分析,无法分析安全漏洞的攻击过程,从而无法精准的识别安全漏洞、且存在误报高的缺点。
有鉴于此,本申请提供了一种安全扫描方法,实施时可以通过将被检测静态源代码转化成抽象语法树结构,然后基于抽象语法树结构进行逻辑关系的解析得到有向图结构,用于提高安全扫描的准确性。其次,还可以进一步根据得到的有向图结构生成控制流和数据流并整合得到流数据,最后基于流数据进行安全扫描。具体实施方式在后文中进行详细说明。
可以理解的是,本申请实施例可以应用于诸如手机、平板电脑、可穿戴设备(例如,手表、手环、头盔、耳机等)、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personalcomputer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)、智能家居设备(例如,智能电视,智能音箱,智能摄像头等)等电子设备。可以理解的是,本申请实施例对电子设备的具体类型不作任何限制。
应理解,本申请实施例中“至少一个”是指一个或者多个。“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的三种情况。其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一(项)个”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a、b或c中的至少一项(个),可以表示:a,b,c,a和b,a和c,b和c,或a、b和c七种情况。其中a、b、c中的每一个本身可以是元素,也可以是包含一个或多个元素的集合。另外,本申请实施例中涉及的“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
本申请实施例可以应用到的电子设备的示例性实施例包括但不限于搭载 或者其它操作系统的便携式电子设备。上述便携式电子设备也可以是其它便携式电子设备,诸如具有触敏表面(例如触控面板)的膝上型计算机(Laptop)等。
图1b示出了一种可能的电子设备的硬件结构示意图。参阅图1b所示,所述电子设备100包括:射频(radio frequency,RF)电路110、电源120、处理器130、存储器140、输入单元150、显示单元160、音频电路170、通信接口180、以及无线保真(wireless fidelity,WiFi)模块190等部件。本领域技术人员可以理解,图1b中示出的电子设备的硬件结构并不构成对电子设备的限定,本申请实施例提供的电子设备可以包括比图示更多或更少的部件,可以组合两个或更多的部件,或者可以具有不同的部件配置。图1b中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
下面结合图1b对所述电子设备100的各个构成部件进行具体的介绍:
所述RF电路110可用于通信或通话过程中,数据的接收和发送。特别地,所述RF电路110在接收到基站的下行数据后,发送给所述处理器130处理;另外,将待发送的上行数据发送给基站。通常,所述RF电路110包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(low noise amplifier,LNA)、双工器等。
此外,RF电路110还可以通过无线通信与网络和其他设备进行通信。所述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(global system ofmobile communication,GSM)、通用分组无线服务(general packet radio service,GPRS)、码分多址(code division multiple access,CDMA)、宽带码分多址(wideband codedivision multiple access,WCDMA)、长期演进(long term evolution,LTE)、电子邮件、短消息服务(short messaging service,SMS)等。
Wi Fi技术属于短距离无线传输技术,所述电子设备100通过Wi Fi模块190可以连接访问接入点(access point,AP),从而实现数据网络的访问。所述Wi Fi模块190可用于通信过程中,数据的接收和发送。
所述电子设备100可以通过所述通信接口180与其他设备实现物理连接。可选的,所述通信接口180与所述其他设备的通信接口通过电缆连接,实现所述电子设备100和其他设备之间的数据传输。
由于在本申请实施例中,所述电子设备100能够实现通信业务,与服务端实现交互,因此所述电子设备100需要具有数据传输功能,即所述电子设备100内部需要包含通信模块。虽然图1b示出了所述RF电路110、所述Wi Fi模块190、和所述通信接口180等通信模块,但是可以理解的是,所述电子设备100中存在上述部件中的至少一个或者其他用于实现通信的通信模块(如蓝牙模块),以进行数据传输。
例如,当所述电子设备100为手机时,所述电子设备100可以包含所述RF电路110,还可以包含所述Wi Fi模块190;当所述电子设备100为计算机时,所述电子设备100可以包含所述通信接口180,还可以包含所述Wi Fi模块190;当所述电子设备100为平板电脑时,所述电子设备100可以包含所述Wi Fi模块。
所述存储器140可用于存储软件程序以及模块。所述处理器130通过运行存储在所述存储器140的软件程序以及模块,从而执行所述电子设备100的各种功能应用以及数据处理。可选的,所述存储器140可以主要包括存储程序区和存储数据区。其中,存储程序区可存储操作系统(主要包括内核层、系统层、应用程序框架层和应用程序层等各自对应的软件程序或模块)。其中,应用程序层可以包含各种应用,进而本申请实施例中基于存储的源代码,采用本申请提供的方法进行安全扫描。
此外,所述存储器140可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述输入单元150可用于接收用户输入的数字或字符信息等多种不同类型的数据对象的编辑操作,以及产生与所述电子设备100的用户设置以及功能控制有关的键信号输入。可选的,输入单元150可包括触控面板151以及其他输入设备152。
其中,所述触控面板151,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在所述触控面板151上或在所述触控面板151附近的操作),并根据预先设定的程序驱动相应的连接装置。
可选的,所述其他输入设备152可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
所述显示单元160可用于显示由用户输入的信息或提供给用户的信息以及所述电子设备100的各种菜单。所述显示单元160即为所述电子设备100的显示系统,用于呈现界面,实现人机交互。所述显示单元160可以包括显示面板161。可选的,所述显示面板161可以采用液晶显示屏(liquid crystal display,LCD)、有机发光二极管(organic light-emitting diode,OLED)等形式来配置。本申请实施例中,例如可以通过显示单元160显示安全扫描之后得到的结果。
所述处理器130是所述电子设备100的控制中心,利用各种接口和线路连接各个部件,通过运行或执行存储在所述存储器140内的软件程序和/或模块,以及调用存储在所述存储器140内的数据,执行所述电子设备100的各种功能和处理数据,从而实现基于所述电子设备的多种业务。本申请实施例中,处理器130用来实现本申请提供的安全扫描方法,进而实现对静态源代码的安全漏洞的检测。
所述电子设备100还包括用于给各个部件供电的电源120(比如电池)。可选的,所述电源120可以通过电源管理系统与所述处理器130逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗等功能。
如图1b所示,电子设备100还包括音频电路170、麦克风171和扬声器172,可提供用户与电子设备100之间的音频接口。音频电路170可用于将音频数据转换为扬声器172能够识别的信号,并将信号传输到扬声器172,由扬声器172转换为声音信号输出。麦克风171用于收集外部的声音信号(如人说话的声音、或者其它声音等),并将收集的外部的声音信号转换为音频电路170能够识别的信号,发送给音频电路170。音频电路170还可用于将麦克风171发送的信号转换为音频数据,再将音频数据输出至RF电路110以发送给比如另一终端,或者将音频数据输出至存储器140以便后续进一步处理。
尽管未示出,所述电子设备100还可以包括至少一种传感器、摄像头等,在此不再赘述。
本申请实施例涉及的操作系统(operating system,OS),是运行在电子设备上的最基本的系统软件。以智能手机为例,操作系统可以是安卓(android)系统或IOS系统。以下实施例以android系统为例进行介绍。本领域技术人员可以理解,其它操作系统中,也可以采用类似的方法实现。
电子设备的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以采用分层架构的android系统为例,示例性说明电子设备的软件结构。图1c示出了本申请实施例提供的android系统的软件结构框图。分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将android系统分为五层,从上至下分别为应用程序层,应用程序框架(framework)层,安卓运行时(android runtime)和系统库,硬件抽象层,以及内核层。
应用程序层是操作系统的最上一层,可以包括一系列应用程序包。如图1c所示,应用程序层可以包括操作系统的原生应用程序和第三方应用程序,其中,操作系统的原生应用程序可以包括用户界面(user interface,UI)、相机、设置、手机管家、音乐、短信息、通话等,第三方应用程序可以包括地图,音乐,视频等。下文中提到的应用,可以是电子设备出厂时已安装的操作系统的原生应用,也可以是用户在使用电子设备的过程中从网络下载或从其他电子设备获取的第三方应用。
在本申请一些实施例中,应用程序层可以用于实现编辑界面的呈现,上述编辑界面可以用于用户实现本申请实施例中获取待检测静态源代码的操作。例如,用户可以在如图4所示的前端界面的编辑界面中实现对被检测的静态源代码的选择,或者是版本的选择。
一种可能的实现方式中,应用程序可以使用java语言开发,通过调用应用程序框架层所提供的应用程序编程接口(application programming interface,API)来完成,开发者可以通过应用程序框架层来与操作系统的底层(例如硬件抽象层、内核层等)进行交互,开发自己的应用程序。该应用程序框架层主要是操作系统的一系列的服务和管理系统。
应用程序框架层为应用程序层的应用程序提供应用编程接口和编程框架。应用程序框架层包括一些预定义函数。如图1c所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,例如显示文本的文本控件,显示图片的图片控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。电话管理器用于提供电子设备100的通信功能,例如通话状态显示的管理(包括接通,挂断等)。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等。
在本申请一些实施例中,该应用程序框架层主要负责调用与硬件抽象层之间通信的服务接口,以将进行的安全扫描的请求传递到硬件抽象层,所述请求还包含有安全扫描服务的预定义编程,用于实现本申请需要对被检测静态源代码进行安全扫描的需求;还负责对登录认证的用户名和密码进行管理等。
示例性的,安全扫描服务可以包括用于实现本申请提供的方法的获取模块、第一结构生成模块、流数据生成模块及安全扫描模块等。
其中,上述获取模块,用于响应于安全扫描指令,获取被检测静态源代码。
上述第一结构生成模块,用于根据所述被检测静态源代码中包含的关键语法信息和代码行号信息,对所述被检测静态源代码进行转化得到第一结构表示;其中所述第一结构用于指示所述被检测静态源代码中包含的关键语法信息,且所述第一结构表示中包含各关键语法信息在所述被检测静态源代码中的代码行号信息。
上述流数据生成模块,用于基于所述第一结构表示得到对所述被检测静态源代码的流数据表示,所述流数据用于指示所述被检测静态源代码中包含的至少一条逻辑关系。得到的流数据用于安全扫描,基于流数据中可以反映源代码中的逻辑关系,从而使得进行安全扫描得到的结果更加准确。
安全扫描模块,用于基于所述流数据进行安全扫描。
安卓运行时(android runtime)包括核心库和虚拟机。android runtime负责安卓系统的调度和管理。安卓系统的核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。以java举例,虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(media libraries),三维图形处理库(例如:OpenGL ES),二维(2D)图形引擎(例如:SGL)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供2D和3D图层的融合。媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。2D图形引擎是2D绘图的绘图引擎。
在本申请一些实施例中,系统库还可以包括:安全扫描服务密码、安全扫描服务配置文件,用于负责提供与应用程序框架层进行通信的服务接口,还负责管理安全扫描服务所需要的配置文件、密码等。安全扫描服务配置文件可用于存储安全扫描服务的信息,安全扫描服务密码可用于存储需要进行安全扫描的用户账户获取特定的被检测静态源代码时需要的认证用户名和登录密码等信息。
硬件抽象层(hardware abstraction layer,HAL)是应用程序框架层的支撑,是连接应用程序框架层与内核层的重要纽带,其可通过应用程序框架层为开发者提供服务。
示例性的,可以通过在硬件抽象层配置第一进程来实现本申请实施例中安全扫描服务的功能,第一进程可以是在硬件抽象层中单独构建的子进程。其中,第一进程可以包括安全扫描服务配置接口、安全扫描服务控制器等模块。其中,安全扫描服务配置接口是与应用程序框架层进行通信的服务接口。其中,安全扫描服务控制器用于对安全扫描服务配置接口进行监控,例如,对安全扫描服务是否需要进行鉴权进行控制等,还负责监控电子设备中输入的数据是否需要缓存或有更新,当输入的数据需要缓存或者有更新时,可以通知应用程序框架层进行相应数据的缓存或更新,以保证显示界面显示的是最新的数据。硬件抽象层中还可以包含有守护进程,该守护进程可以用于缓存第一进程中的数据,守护进程也可以是在硬件抽象层中单独构建的子进程。
内核层可以是Linux内核(Linux kernel)层,是硬件和软件之间的抽象层。内核层有许多与电子设备相关的驱动程序,至少包含显示驱动;基于Linux的帧缓冲驱动;作为输入设备的键盘驱动、鼠标驱动;基于内存技术设备的Flash驱动;音频驱动;蓝牙驱动等,本申请实施例对此不做任何限制。Linux内核层用于提供操作系统的核心系统服务,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都基于Linux内核实现。在本申请一些实施例中,Linux内核依赖于本地文件系统,通过安全扫描服务可以访问该本地文件系统,通过硬件抽象层的安全扫描服务配置接口可以对本地文件系统中的文档进行配置。
通常电子设备可以同时运行多个应用。较为简单的,一个应用对应一个进程,较为复杂的,一个应用对应多个进程。每个进程具备一个进程号(进程ID)。
结合上述图1b中对电子设备的硬件结构的介绍,以及图1c中对电子设备的软件框架的介绍,下面针对安全扫描的场景,示例性说明电子设备100执行本申请实施例中提出的安全扫描方法的软件以及硬件的工作原理。
应理解,本申请实施例中“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一(项)个”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a、b或c中的至少一项(个),可以表示:a,b,c,a和b,a和c,b和c,或a、b和c,其中a、b、c可以是单个,也可以是多个。
本申请实施例涉及的多个,是指大于或等于两个。
另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
此外,本申请实施例中,“电子设备”、“设备”、“手机”等可以混用,即指可以用于实现本申请实施例的各种设备。在下文的介绍中,将客户端侧对本申请实施例进行介绍,其中客户端即为可以用于实现本申请实施例的各种设备。应理解,电子设备的硬件结构可以如图1b所示,软件架构可以如图1c所示,其中,电子设备中的软件架构对应的软件程序和/或模块可以存储在存储器140中,处理器130可以运行存储器140中存储的软件程序和应用以执行本申请实施例提供的安全扫描方法的流程。
在对本申请实施例提供的一种安全扫描方法进行说明之前,下面首先对本申请提供方法使用的一种可能的应用场景进行介绍,如图1d所示,该应用场景中包括用户10、客户端11、服务端12。用户10可通过客户端11获取被检测静态源代码,然后对被检测静态源代码进行转化之后得到抽象语法树结构,其次对抽象语法树结构进行解析得到有向图结构,最后基于有向图结构进行分析得到流数据,并将流数据发给服务端12,以使所述服务端12基于流数据实现安全扫描。当然,具体实施时,应用场景中也可以没有服务端12,可以仅通过客户端11实现安全扫描,或者,也可以将部分处理过程由服务端12进行处理,也即,只要可以实现本申请提供的一种安全扫描方法的场景,本申请均适用。这里的客户端11可以具有上述图1b所示的硬件架构和图1c所示的软件架构。
其次对本申请实施例中可能涉及到的概念、名词进行说明,以便于更容易地理解本申请提供的方法,如下:
(1)、静态源代码,也可以被称为静态源程序等,是程序员利用开发工具所支持的语言编写而成的,且是一系列计算机可读的计算机语言指令。静态源代码是由一组具有特定意义、可以实现特定功能的字符构成的。
静态源代码具有基线版本和迭代版本。基线版本表示静态源代码开发的基础,也可以理解为初代版本,而迭代版本则表示为在基线版本的基础上,进行变更后的静态源代码。本申请实施例并不限定迭代版本相对于基线版本变更的次数,对静态源代码的基线版本进行过变更、优化等更新之后得到的静态源代码均可以称为迭代版本。
(2)、抽象语法树(abstract syntax tree,AST),是对静态源代码的一种抽象语法结构的树状表示,树上的每个语法节点都可以表示静态源代码中的一种结构,如可以表征变量、函数、方法等。之所以称为抽象的语法树,是因为在抽象语法树结构中,针对于静态源代码中出现的每一个细节并不会全部呈现,比如一些不重要的细节信息会被隐含在树结构中,而没有以树中的节点呈现出来,其中不重要的细节信息比如冒号、嵌套括号、分号等。
(3)、有向图,与抽象语法树类似,是对静态源代码的一种有向图结构的表示,对于静态源代码中,比如表达式中的每个子表达式,都有一个节点;而且,有向图中的一个内部节点表示静态源代码的一个操作符,它的子节点代表操作数。
与抽象语法树不同的是,在有向图中代表公共子表达式的节点具有多个父节点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。
举个简单的例子,以表达式“a+a*(b-c)+(b-c)*d”作为示例,参阅图2所示的为一种抽象语法树与有向图形树表示的示例,其中,抽象语法树可以通过节点的形式将表达式呈现出来,但其对于公共子表达式,例如“b-c”表示为重复的子树或节点。而有向树在呈现表达式的基础上,公共子表达式呈现为一个节点,并且通过该节点具有多个父节点来表示该公共子表达式多种不同的被引用关系。
(4)、图形树,抽象语法树和有向图本质上表示为软件代码的形式,为了更清楚地理解抽象语法树和有向图,可以将有向图进行图形树之后,通过树状形式表示出来,即如图2中所示的表现形式。此外,有向图进行图形树处理之后,也可以称作为有向树。
(5)、控制流,是一种机制,指按一定逻辑顺序排列代码元素,从而来决定代码执行的顺序,也即控制流决定程序下一步应该怎样执行。
(6)、数据流,是在控制流上的数据操作表示,只有在控制流上进行的数据流分析才是具有价值的。
下面结合附图并且通过几个可能的实施例,对实现本申请提供的一种安全扫描方法进行说明。
实施例一
如图3所示,为本申请实施例一提供的一种安全扫描方法的流程示意图,包括以下步骤:
步骤301:客户端将被检测静态源代码转化为第一结构表示;其中所述第一结构用于指示所述被检测静态源代码中包含的关键语法信息,且所述第一结构表示中包含各关键语法信息在所述被检测静态源代码中的代码行号信息。
实施时,客户端首先获取被检测静态源代码,参阅图4,为本申请实施例提供的用于获取被检测静态源代码的一种可能的前端界面示例图。在图4所示的前端界面中,可以至少包含:用于鉴权的用户账号、被检测静态源代码获取路径、针对被检测静态源代码的版本类型(例如可以包含静态源代码的基线版本、上次选择的历史版本、本次选择的版本、选择其他版本的入口等)。需要说明的是,图4所示的前端界面仅是本申请提供的一种示例,并不限定获取被检测静态代码的实施方式。并且,用户还可以根据进行安全扫描的需求,在前端界面中还包含用于实现更精准、详细功能的控件,比如可以包含静态安全扫描和动态安全扫描的选项,以便于用户根据需求选择安全扫描的方式。
其中,针对每一个被检测静态源代码来说,若存在所述静态源代码的历史安全扫描记录,则可以基于上次选择的历史版本与本次选择的版本进行对比,筛选出本次选择的版本中相对于上次选择的历史版本进行变更的代码部分,进而通过对变更的代码部分进行安全扫描得到本次安全扫描结果,然后结合上次安全扫描结果得到针对被检测静态源代码本次选择的版本的完整的安全扫描结果。通过该实施方式,在对被检测静态源代码的每次安全扫描,无需对源代码全部进行扫描,通过对变更的代码部分的扫描,可以提高安全扫描过程中的安全扫描效率,从而减少安全扫描的时间。
客户端在从获取路径获取到被检测静态源代码之后,为了解决现有技术中直接根据静态源代码进行安全扫描存在误报高的缺点,本申请实施过程中,先将被检测静态源代码转化为第一结构表示,示例性的可以为AST结构。
实施时,客户端得到AST结构的一种可能的实施方式为,首先,将被检测静态源代码翻译转化为具象语法树(concret syntax tree,CST)结构,其中CST结构中包含被检测静态源代码的所有语法信息,所以CST结构存在冗余的缺点。其次,考虑到CST结构具有冗余的问题,可以将CST结构中包含的一些不重要的细节信息进行抽离,进而根据CST结构中包含的关键信息(其中关键信息例如包括:类结构、方法结构、继承结构等)得到AST结构。这样,客户端得到的AST结构为包含被检测静态源代码的关键语法结构成分的语法树表示,无需依赖被检测静态源代码中采用的语法,因此由于AST结构只抽离出重要的信息,可以得到更清晰、更简洁的接口,从而为开发人员操作被检测静态源代码提供了便携的渠道。
此外,由于一般输出的AST结构的程序代码是不具有代码行号的,本申请实施例中,为了提高安全扫描的定位能力,客户端还可以基于开源的PLYJ组件(一种用于解析源代码的底层组件)对被检测静态源代码进行解析,将静态源代码中的行号信息结合在生成的抽象语法树结构中。具体实施时,客户端在解析过程中,记录解析的静态源代码的行号信息,以类结构、方法结构等关键信息的组成,将当前结构的首尾行号信息记录到AST结构中,从而实现转化之后的AST结构具有行号跟踪定位能力,进而可以提高安全扫描时的精确定位,并映射到被检测静态源代码的能力。举例来说,若方法A在静态源代码中所在的行号信息为7~10行,在AST结构的软件代码中,在介绍方法A的内容之前,标记以下内容对应静态源代码中从行号为7的代码开始,比如标记为——“head_index”:7;同理,在介绍完方法A的内容之后,标记静态源代码中方法A到行号为10的代码结束,比如标记为——“tail_index”:10,通过在AST结构的软件代码中标记行号信息,在安全扫描过程中若从AST结构中扫描到方法A存在安全漏洞,根据介绍方法A之前标记的行号信息,可以从被检测静态源代码中确定行号7~10中存在安全漏洞。
步骤302:客户端根据AST结构的程序代码得到流数据。
由于将单一的AST结构的程序代码应用在安全扫描上具有复杂性高的问题,因此本申请实施时,客户端进一步对AST结构进行解析得到多个语法节点,然后根据各语法节点以及语法节点的调用关系和/或被调用关系得到可以反映被检测静态源代码语法信息的逻辑关系,也即程序的执行顺序;最后基于静态源代码的逻辑关系得到控制流(control flowgraph,CFG)和数据流(data flow graph,DFG),再将控制流和数据流整合得到流数据。其中,流数据中包含的控制流可以清晰地反映被检测静态源代码中的逻辑关系,而流数据中包含的数据流则是数据基于逻辑关系的执行顺序进行操作之后得到的数据表示。本申请实施时,流数据可以用于安全扫描,通过流数据可以获取到逻辑关系,从而在安全扫描的过程中,提高了代码的跟踪能力,进而可以提高安全扫描的效率。
步骤303:客户端将得到的流数据发送到服务端。
步骤304:服务端基于安全扫描规则对解析之后的流数据进行安全扫描。
其中,服务端根据安全漏洞对具体产生问题的漏洞组件进行分析,通过分析该漏洞组件的特征,提炼出特定的关键信息(包括指纹、关键词、方法名等),进而基于关键信息得到安全扫描规则。
实施例二
以下介绍实施例一包含的步骤302中根据AST结构的程序代码得到流数据的一种具体的实施方式,参阅图5所示,包括以下步骤:
步骤3021:客户端基于AST结构的程序代码进行解析得到有向图。
举例来说,被检测静态源代码中存在方法A、方法B、方法C、方法D,客户端将被检测静态源代码转化为AST结构的程序代码之后,由于对检测静态源代码中不重要信息的抽离,因此基于AST结构的程序代码存在无法得到完整的逻辑关系的问题,即AST结构的程序代码无法反映被检测静态源代码中的逻辑关系,包含的主要是多个重要的语法节点,各语法节点之间无法实现逻辑关系的关联。
实施时,客户端对AST结构的程序代码中的语法节点进行解析,解析出AST结构中包含的多个语法节点,比如方法A、方法B、方法C、方法D;然后,客户端根据各语法节点以及各语法节点的调用关系和/或被调用关系可以得到方法结点之间的逻辑关系,比如客户端根据方法B的调用关系和/或被调用关系可以得到方法B是接收方法A的调用、根据方法C的调用关系和/或被调用关系可以得到方法C也是接收方法A的调用、根据方法D的调用关系和/或被调用关系可以得到方法D可以接收方法B的调用,也可以接收方法C的调用,因此客户端根据对AST结构的程序代码的解析,可以得到方法D具有两个父节点。具体参阅图6的有向图所示。
此外,在被检测静态源代码中,还可能存在反射(释义:指程序可以访问、检测和修改它本身状态或行为的一种能力)、远程调用(释义:指进程间的功能调用。进程和进程既可以存在于同一台计算机,也可以存在于不同的计算机上。远程并不是指距离上的远程,而是指由于进程和进程之间彼此隔离,跨越进程的边界,才叫远程)等场景,因此在无向图生成有向图时,可能无法对这些场景及时进行关联,从而导致基于AST结构得到的有向图也存在断链的问题,即无法准确的反映静态源代码中的完整的逻辑关系。因此,客户端在生成有向树的结构时,为了实现对这些场景进行覆盖,具体实施为,通过反射和远程调用的软件代码中的函数或者函数中包含字符串内容,匹配方法结点中的名字,从而实现方法节点之间的完整的逻辑关系,进而可以更准确的反映被检测静态源代码中的软件代码执行逻辑。
步骤3022:客户端基于有向图节点生成图形树,即有向树。
客户端为了更直观的确定基于AST结构的程序代码得到的逻辑关系,将得到的逻辑关系通过图形树的形式来表示,参阅图6,示出的为将步骤3021得到的有向图表示为树化图形的示例,在该示例中,以方法A作为第一级节点,基于逻辑关系逐一指向下一个被调用的方法,其中从图6中可以得到方法D具有两个父节点,即分别为方法B和方法C。
步骤3023:客户端根据有向树生成控制流和数据流。
通过步骤3022中得到的有向树可以得到被检测静态源代码中的逻辑关系,基于静态源代码中的逻辑关系的复杂性和交叉性,有向图中可能存在从顶点开始的多条有向通路,为了提高安全扫描的过程中的从顶点跟踪每条有向通路的业务逻辑的能力,客户端将有向图中的各条有向通路转换为对应的控制流和数据流。其中,一个有向树可以至少得到一个控制流,举例来说,如图6中所示的有向树可以得到“方向A→方法B→方法D”和“方向A→方法C→方法D”的两条控制流,数据流则为数据基于控制流的执行顺序进行操作之后得到的数据操作表示。这样,基于有向树得到多条控制流和数据流,从而可以清楚的识别每条控制流的入口,进而从每条控制流的入口开始进行安全扫描,提高了安全扫描能力。
步骤3024:客户端根据数据流和控制流整合得到流数据。
通过客户端基于数据流和控制流整合得到的流数据之后,可以将得到的流数据发送到服务端进行安全扫描,由于流数据中包含的每一条控制流都可以表示有向树中的一条有向通路,因此服务端可以更清楚、准确的通过每条有向通路的入口开始,分别实现对每条有向通路的安全扫描,从而降低安全扫描结果的误报率,提高漏洞检测的准确性。
实施例三
为了更直观的理解通过客户端和服务端来实现本申请实施例提供的一种安全扫描方法,以下结合几种可能的场景以及图7a~图7d所示的结构图来说明本申请。下面首先对以下实施例中可能出现的缩略语进行说明,如以下表1所示:
表1
英文缩略语 | 完整的英文表述/英文标准用语 | 中文表述/中文术语 |
SAST | static application security testing | 静态应用安全测试 |
AG | abstract syntax tree Generator | 抽象语法树生成器 |
FGU | flow graph unit | 流数据生成模块 |
SU | scanner unit | 安全扫描模块 |
DNG | digraph node generator | 有向图节点生成器 |
GTG | graph tree generator | 图形树生成器 |
CG | control flow graph generator | 控制流生成器 |
DG | data flow graph generator | 数据流生成器 |
FGG | flow graph generator | 流数据生成器 |
FGP | flow graph parser | 流数据解析器 |
SRP | scanner rule parser | 安全扫描规则解析器 |
FGS | flow graph scanner | 流数据扫描器 |
结合图1d中示出的本申请实施例提供的一种可能的应用场景,以及前述实施例中对本申请提供的方法的实施过程的介绍,以下通过几种可能的场景来说明基于客户端和服务端的交互来实现本申请提供的方法的实现方式。
场景一、参阅图7a所示的为一种安全扫描方法的结构示意图,包括:获取模块701、第一结构生成模块702、流数据生成模块703(FGU)、安全扫描模块704(SU),其中:
所述第一结构生成模块702,用于接收并响应安全扫描事件之后,基于获取的被检测静态源代码生成用于指示所述被检测静态源代码中包含的关键语法信息的第一结构形式的程序代码,通过第一结构形式表示的静态源代码,可以更加直观的反映程序代码之间的逻辑关系。
示例性的,所述第一结构可以为AST结构表示,则所述第一结构生成模块702可以表示为抽象语法树生成器AG;
所述FGU,用于将通过AG得到的AST结构形式的程序代码进一步转化为流数据形式,通过流数据进行安全扫描,可以提高安全扫描的效率。
所述SU,用于对FGU得到的流数据进行安全扫描,从而检测静态源代码中存在的安全漏洞。需要说明的是,根据前述实施例中的介绍,由于在获取被检测静态源代码时可以选择基线版本或者是迭代版本,或者还可以包括上次选择的历史版本、本次选择的版本,为了进一步提高安全扫描的效率,在进行安全扫描之前,可以实施为首先判断流数据形式的静态源代码与基线版本相比变更的代码部分,然后在安全扫描过程中,根据变更的代码部分进行安全扫描。最后,将所述SU得到的安全扫描结果显示在前端界面上,用以便于用户分析安全扫描结果。
其中,在该场景下,安全扫描模块704处于服务端,第一结构生成模块702和流数据生成模块703处于客户端。
场景二、实施时,参阅图7b所示,在场景一的基础上,流数据生成模块703(FGU)具体包括:第二结构生成模块、图形树生成器(GTG)、控制流生成器(CG)、数据流生成器(DG)以及流数据生成器(FGG)。其中流数据生成器FGG输出的即为流数据形式的静态源代码,其中:
所述第二结构生成模块,用于将AG输出的AST结构形式的程序代码转化为包含所述被检测静态源代码中多个语法节点的逻辑关系的第二结构表示的程序代码,以实现解析出AST结构中的多个语法节点,并且根据多个语法节点和各语法节点的调用关系和/或被调用关系得到静态源代码的逻辑关系。示例性的,第二结构可以为有向图结构表示,则所述第二结构生成模块可以为有向图节点生成器(DNG)。
所述GTG,用于将有向图结构的静态源代码生成树状结构表示,从而得到有向树,例如图6所示的示意图。
所述CG,用于提取所述有向树中的至少一条逻辑关系,从而得到静态源代码中的执行顺序作为控制流,其中一条控制流用于表示所述有向树中的一条逻辑关系。
所述DG,用于基于控制流生成器CG得到的控制流的基础上,根据有向树中的数据参数,获取数据参数根据控制流的控制方向进行数据操作表示的过程,得到数据流,其中,每条控制流都对应一条数据流。
所述FGG,用于根据所述CG得到的控制流和所述DG得到的数据流,进行整合得到的流数据。
参阅图7b所示,同样在场景一的基础上,安全扫描模块704(SU)具体包括:流数据解析器(FGP)、安全扫描规则解析器(SRP)、流数据扫描器(FGS)。其中:
所述FGP,用于对接收到的流数据进行解析,用以解析出流数据中包含的全部控制流和数据流,以便于将解析出来的控制流和数据流用于安全扫描。
所述SRP,用于提供安全扫描规则。其中,安全扫描规则是根据不同的被检测源代码中的特征,预先根据安全漏洞对具体产生问题的漏洞组件进行分析,通过分析该漏洞组件的特征并提炼出特定的关键信息之后生成的。示例性的,可以基于安全扫描规则得到检索关键词,根据检索关键词与流数据中数据内容的匹配,进而判断是否存在安全漏洞。
所述FGS,用于基于所述安全扫描规则对所述流数据解析器FGP解析之后的流数据进行安全扫描。
应用场景三、参阅图7c,该场景与场景一中实现本申请提供的方法流程类似,而与场景一不同的是,该场景为了减轻客户端的处理压力,提供了一种将流数据生成模块703执行的操作置于服务端上,从而降低了客户端的计算压力。
应用场景四、参阅图7d,该场景与场景一中实现本申请提供的方法流程同样类似,且与场景一不同的是,该场景可以实现单机进行安全扫描的能力,具体实施为,将安全扫描模块704执行的操作置于客户端上,从而由客户端实现整个安全扫描的过程,从而实现了在客户端具有处理能力的情况下,无需再与服务端交互来实现安全扫描。
参阅图8a,为本申请实施例提供的一种安全扫描结果展示列表的前端示意图,例如在该前端显示界面中包含各种子产品的安全扫描状态,例如图8a中任务ID为2、5的子产品任务正在执行安全扫描状态;并且,在该前端显示界面中还可以包含执行进展和归档状态,从而得到针对不同的子产品的安全扫描结果。
参阅图8b,为本申请实施例提供的一种安全扫描结果的示意图,图8b区别于图8a,用来显示为针对一个任务详细的安全扫描结果,通过该前端界面可以查看可能存在安全漏洞所在的代码行以及问题详情等,从而便于开发人员确认安全扫描的结果。
上述本申请提供的实施例中,从电子设备作为执行主体的角度对本申请实施例提供的方法进行了介绍。为了实现上述本申请实施例提供的方法中的各功能,电子设备可以包括硬件结构和/或软件模块,以软件模块或者硬件结构结合软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。
如图9所示,本申请实施例公开了一种电子设备900,该电子设备900可以包括:一个或多个处理器901和存储器902。多个处理器901和存储器902可以通过一个或多个通信总结连接。其中,该程序指令被存储在上述存储器902中并配置为被一个或多个处理器901执行,其中:
所述处理器901用于执行响应于安全扫描指令,获取被检测静态源代码;根据所述被检测静态源代码中包含的关键语法信息和代码行号信息,对所述被检测静态源代码进行转化得到第一结构表示;其中所述第一结构用于指示所述被检测静态源代码中包含的关键语法信息,且所述第一结构表示中包含各关键语法信息在所述被检测静态源代码中的代码行号信息;基于所述第一结构表示得到对所述被检测静态源代码的流数据表示,所述流数据用于指示所述被检测静态源代码中包含的至少一条逻辑关系;基于所述流数据进行安全扫描。
在一种可能的设计中,所述处理器901用于执行基于所述第一结构表示得到对所述被检测静态源代码的流数据表示时,具体执行:从所述第一结构表示中解析得到多个语法节点,各语法节点具有调用关系和/或被调用关系;基于所述各语法节点的调用关系和/或被调用关系,生成所述被检测静态源代码的第二结构表示;所述第二结构中包含所述被检测静态源代码中多个语法节点的逻辑关系;根据所述第二结构表示得到树状结构表示,所述树状结构用于指示所述被检测静态源代码中多个语法节点的逻辑关系;基于所述树状结构,生成至少一条控制流以及各控制流匹配的数据流;其中,每条控制流用于指示一条逻辑关系;将所述控制流和数据流进行整合,得到所述流数据表示。
在一种可能的设计中,所述处理器901用于执行响应于安全扫描指令,获取被检测静态源代码时,具体执行:响应于对静态源代码基线版本的安全扫描指令,将所述静态源代码基线版本作为所述待检测静态源代码;或者,响应于对静态源代码迭代版本的安全扫描指令,且本地存储有对所述静态源代码基线版本的安全扫描结果,获取所述静态源代码迭代版本相对于基线版本变更的代码部分,将所述变更的代码部分作为所述待检测静态源代码;或者,响应于对静态源代码迭代版本的安全扫描指令,且本地存储有对所述静态源代码历史迭代版本的安全扫描结果,获取所述静态源代码迭代版本相对于历史迭代版本变更的代码部分,将所述变更的代码部分作为所述待检测静态源代码。
示例性的,所述关键语法信息至少包括以下中的一种:类结构、方法结构、继承结构;所述第一结构可以表示为抽象语法树结构。所述第二结构可以表示为有向图结构。
在一种可能的设计中,所述处理器901执行基于所述流数据进行安全扫描时,具体执行:基于用于安全扫描的检索关键词对所述流数据进行遍历,所述检索关键词通过安全扫描规则得到;在遍历到所述流数据中存在与所述检索关键词匹配的数据,则表示存在安全漏洞。
上述各个实施例中涉及处理器可以是通用处理器、数字信号处理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存取存储器(random access memory,RAM)、闪存、只读存储器(read-only memory,ROM)、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的指令,结合其硬件完成上述方法的步骤。
具体的,上述电子设备900的具体实现方式可以参见方法部分的相关介绍,在此不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内,因此本申请的保护范围应以权利要求的保护范围为准。
Claims (15)
1.一种安全扫描方法,其特征在于,该方法包括:
响应于安全扫描指令,获取被检测静态源代码;
根据所述被检测静态源代码中包含的关键语法信息和代码行号信息,对所述被检测静态源代码进行转化得到第一结构表示;其中所述第一结构用于指示所述被检测静态源代码中包含的关键语法信息,且所述第一结构表示中包含各关键语法信息在所述被检测静态源代码中的代码行号信息;
基于所述第一结构表示得到对所述被检测静态源代码的流数据表示,所述流数据用于指示所述被检测静态源代码中包含的至少一条逻辑关系;
基于所述流数据进行安全扫描。
2.根据权利要求1所述的方法,其特征在于,所述基于所述第一结构表示得到对所述被检测静态源代码的流数据表示,包括:
从所述第一结构表示中解析得到多个语法节点,各语法节点具有调用关系和/或被调用关系;
基于所述各语法节点的调用关系和/或被调用关系,生成所述被检测静态源代码的第二结构表示;所述第二结构中包含所述被检测静态源代码中多个语法节点的逻辑关系;
根据所述第二结构表示得到树状结构表示,所述树状结构用于指示所述被检测静态源代码中多个语法节点的逻辑关系;
基于所述树状结构,生成至少一条控制流以及各控制流匹配的数据流;其中,每条控制流用于指示一条逻辑关系;
将所述控制流和数据流进行整合,得到所述流数据表示。
3.根据权利要求1所述的方法,其特征在于,所述响应于安全扫描指令,获取被检测静态源代码,包括:
响应于对静态源代码基线版本的安全扫描指令,将所述静态源代码基线版本作为所述待检测静态源代码;或者,
响应于对静态源代码迭代版本的安全扫描指令,且本地存储有对所述静态源代码基线版本的安全扫描结果,获取所述静态源代码迭代版本相对于基线版本变更的代码部分,将所述变更的代码部分作为所述待检测静态源代码;或者,
响应于对静态源代码迭代版本的安全扫描指令,且本地存储有对所述静态源代码历史迭代版本的安全扫描结果,获取所述静态源代码迭代版本相对于历史迭代版本变更的代码部分,将所述变更的代码部分作为所述待检测静态源代码。
4.根据权利要求1~3任一所述的方法,其特征在于,所述关键语法信息至少包括以下中的一种:类结构、方法结构、继承结构;
所述第一结构表示为抽象语法树结构。
5.根据权利要求2所述的方法,其特征在于,所述第二结构表示为有向图结构。
6.根据权利要求1所述的方法,其特征在于,基于所述流数据进行安全扫描,包括:
基于用于安全扫描的检索关键词对所述流数据进行遍历,所述检索关键词通过安全扫描规则得到;
在遍历到所述流数据中存在与所述检索关键词匹配的数据,则表示存在安全漏洞。
7.一种安全扫描装置,其特征在于,该装置包括:
获取模块,用于响应于安全扫描指令,获取被检测静态源代码;
第一结构生成模块,用于根据所述被检测静态源代码中包含的关键语法信息和代码行号信息,对所述被检测静态源代码进行转化得到第一结构表示;其中所述第一结构用于指示所述被检测静态源代码中包含的关键语法信息,且所述第一结构表示中包含各关键语法信息在所述被检测静态源代码中的代码行号信息;
流数据生成模块,用于基于所述第一结构表示得到对所述被检测静态源代码的流数据表示,所述流数据用于指示所述被检测静态源代码中包含的至少一条逻辑关系;
安全扫描模块,用于基于所述流数据进行安全扫描。
8.根据权利要求7所述的装置,其特征在于,所述流数据生成模块,用于基于所述第一结构表示得到对所述被检测静态源代码的流数据表示时,具体包括:
第二结构生成模块,用于从所述第一结构表示中解析得到多个语法节点,各语法节点具有调用关系和/或被调用关系;以及基于所述各语法节点的调用关系和/或被调用关系,生成所述被检测静态源代码的第二结构表示;所述第二结构中包含所述被检测静态源代码中多个语法节点的逻辑关系;
图形树生成器,用于根据所述第二结构表示得到树状结构表示,所述树状结构用于指示所述被检测静态源代码中多个语法节点的逻辑关系;
控制流生成器,用于基于所述树状结构,生成至少一条控制流以及各控制流匹配的数据流;其中,每条控制流用于指示一条逻辑关系;
数据流生成器,用于基于所述树状结构和所述至少一条控制流,生成各控制流匹配的数据流;
流数据生成器,用于将所述控制流和数据流进行整合,得到所述流数据表示。
9.根据权利要求7所述的装置,其特征在于,所述获取模块,具体用于:
响应于对静态源代码基线版本的安全扫描指令,将所述静态源代码基线版本作为所述待检测静态源代码;或者,
响应于对静态源代码迭代版本的安全扫描指令,且本地存储有对所述静态源代码基线版本的安全扫描结果,获取所述静态源代码迭代版本相对于基线版本变更的代码部分,将所述变更的代码部分作为所述待检测静态源代码;或者,
响应于对静态源代码迭代版本的安全扫描指令,且本地存储有对所述静态源代码历史迭代版本的安全扫描结果,获取所述静态源代码迭代版本相对于历史迭代版本变更的代码部分,将所述变更的代码部分作为所述待检测静态源代码。
10.根据权利要求7~9任一所述的装置,其特征在于,所述关键语法信息至少包括以下中的一种:类结构、方法结构、继承结构;
所述第一结构表示为抽象语法树结构。
11.根据权利要求8所述的装置,其特征在于,所述第二结构表示为有向图结构。
12.根据权利要求7所述的装置,其特征在于,所述安全扫描模块,具体包括:
安全扫描规则解析器,用于基于用于安全扫描的检索关键词对所述流数据进行遍历,所述检索关键词通过安全扫描规则得到;
流数据扫描器,用于在遍历到所述流数据中存在与所述检索关键词匹配的数据,则确认存在安全漏洞。
13.一种计算设备,其特征在于,所述计算设备包括处理器和存储器;
所述存储器,存储计算机程序指令;
所述处理器调用所述存储器中的计算机程序指令以执行如权利要求1至6中任一项所述的方法。
14.一种计算设备集群,其特征在于,包括多个如权利要求13所述的计算设备。
15.一种计算机程序产品,其特征在于,包括计算机指令,当所述计算机指令在计算设备上运行时,使得所述计算机执行如权利要求1至6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011300468.4A CN114595449A (zh) | 2020-11-19 | 2020-11-19 | 一种安全扫描方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011300468.4A CN114595449A (zh) | 2020-11-19 | 2020-11-19 | 一种安全扫描方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114595449A true CN114595449A (zh) | 2022-06-07 |
Family
ID=81812726
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011300468.4A Pending CN114595449A (zh) | 2020-11-19 | 2020-11-19 | 一种安全扫描方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114595449A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115981711A (zh) * | 2023-03-20 | 2023-04-18 | 花瓣云科技有限公司 | 一种代码处理方法及电子设备 |
-
2020
- 2020-11-19 CN CN202011300468.4A patent/CN114595449A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115981711A (zh) * | 2023-03-20 | 2023-04-18 | 花瓣云科技有限公司 | 一种代码处理方法及电子设备 |
CN115981711B (zh) * | 2023-03-20 | 2023-06-27 | 花瓣云科技有限公司 | 一种代码处理方法及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109358936B (zh) | 信息处理方法、装置、存储介质、电子设备及系统 | |
US20220075518A1 (en) | Fast Data Copying Method and Electronic Device | |
KR101657379B1 (ko) | 원격 환경에 대해 데이터 엔트리 콘텐츠를 제공하기 위한 방법 및 장치 | |
CN106295353B (zh) | 一种引擎漏洞检测的方法以及检测装置 | |
CN111596998A (zh) | 一种水墨屏的页面处理方法及终端 | |
CN110865837B (zh) | 一种进行系统升级的方法和终端 | |
CN112527386B (zh) | 应用程序发布方法及装置 | |
CN107291465A (zh) | 页面显示方法、装置及存储介质 | |
US12061859B2 (en) | Markdown data content with action binding | |
CN114610197A (zh) | 一种应用退出时的显示方法及终端 | |
CN111026400A (zh) | 业务数据流的解析方法及其装置 | |
CN113835569A (zh) | 终端设备、应用内部功能的快捷启动方法和存储介质 | |
CN111813465A (zh) | 一种信息获取方法、装置、介质和设备 | |
CN114595449A (zh) | 一种安全扫描方法及装置 | |
CN106230919B (zh) | 一种文件上传的方法和装置 | |
CN110443062B (zh) | 多租户数据库的操作方法、装置和计算机设备 | |
US9575751B2 (en) | Data extraction and generation tool | |
CN114077575B (zh) | 用于内存快照文件的格式转换方法、设备和系统 | |
CN105940642A (zh) | 一种信息显示的方法、终端、服务器 | |
CN115114515A (zh) | 一种基于用户兴趣的内容推荐方法与终端设备 | |
CN111880698A (zh) | 智能终端的信息处理方法、装置、电子设备和存储介质 | |
CN115220851B (zh) | 操作指引的方法、电子设备及可读存储介质 | |
CN114463730B (zh) | 一种页面识别方法及终端设备 | |
WO2023216199A1 (zh) | 日志仿真方法、装置、系统、电子设备及存储介质 | |
CN112929858B (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 |