发明内容
本申请的目的是提供一种属性攻击图的环路识别方法、环路识别装置、服务器以及计算机可读存储介质,通过从初始节点开始,根据每个节点的属性将搜索到的新的节点记录至已遍历的节点集合中,每当搜索到下一个节点时,进行判断以便确定是否存在重合的节点,最终实现环路的判断,提高了属性攻击图中的环路识别的效率。
为解决上述技术问题,本申请提供一种属性攻击图的环路识别方法,包括:
根据每个节点的属性从初始节点开始搜索路径,并将搜索到的新的节点记录至已遍历节点集合中;
每当搜索到下一个节点,判断所述下一个节点与所述已遍历节点集合中的节点是否重合;
若是,将所述下一个节点对应的路径作为环路。
可选的,还包括:
计算所述环路的路径重合度;
当所述路径重合度为1时,判断所述环路的起点是否为漏洞节点;
若是,则删除所述环路;
若否,则根据所述环路的单调性对所述环路进行处理。
可选的,还包括:
当所述路径重合度大于1时,根据获取到的目的节点关注信息对所述环路进行处理。
可选的,还包括:
当搜索到分岔路径的节点时,将所述节点记为分岔点;
对所述分岔点对应的每条路径设立新的已遍历节点集合;
对所述分岔点的每条路径进行搜索,并将搜索到的新的节点记录至对应的已遍历节点集合中。
本申请还提供一种属性攻击图的环路识别装置,包括:
节点遍历模块,用于根据每个节点的属性从初始节点开始搜索路径,并将搜索到的新的节点记录至已遍历节点集合中;
重合判断模块,用于每当搜索到下一个节点,判断所述下一个节点与所述已遍历节点集合中的节点是否重合;
环路获取模块,用于当所述下一个节点与所述已遍历节点集合中的节点重合时,将所述下一个节点对应的路径作为环路。
可选的,还包括:
第一环路处理模块,用于计算所述环路的路径重合度;当所述路径重合度为1时,判断所述环路的起点是否为漏洞节点;若是,则删除所述环路;若否,则根据所述环路的单调性对所述环路进行处理。
可选的,还包括:
第二环路处理模块,用于当所述路径重合度大于1时,根据获取到的目的节点关注信息对所述环路进行处理。
可选的,还包括:
岔路处理模块,用于当搜索到分岔路径的节点时,将所述节点记为分岔点;对所述分岔点对应的每条路径设立新的已遍历节点集合;对所述分岔点的每条路径进行搜索,并将搜索到的新的节点记录至对应的已遍历节点集合中。
本申请还提供一种服务器,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上所述的环路识别方法的步骤。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的环路识别方法的步骤。
本申请所提供的一种属性攻击图的环路识别方法,包括:根据每个节点的属性从初始节点开始搜索路径,并将搜索到的新的节点记录至已遍历节点集合中;每当搜索到下一个节点,判断所述下一个节点与所述已遍历节点集合中的节点是否重合;若是,将所述下一个节点对应的路径作为环路。
通过从初始节点开始,根据每个节点的属性将搜索到的新的节点记录至已遍历的节点集合中,每当搜索到下一个节点时,进行判断以便确定是否存在重合的节点,最终实现环路的判断,提高了属性攻击图中的环路识别的效率。
本申请还提供一种属性攻击图的环路识别装置、服务器以及计算机可读存储介质,具有以上有益效果,在此不作赘述。
具体实施方式
本申请的核心是提供一种属性攻击图的环路识别方法、环路识别装置、服务器以及计算机可读存储介质,通过从初始节点开始,根据每个节点的属性将搜索到的新的节点记录至已遍历的节点集合中,每当搜索到下一个节点时,进行判断以便确定是否存在重合的节点,最终实现环路的判断,提高了属性攻击图中的环路识别的效率。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
现有技术中一般是通过人工的方式,查找出攻击图中的环路,以便对攻击图中的环路问题进行相应的处理。随着攻击图技术发展,出现了基于数据节点的攻击图技术,在此基础上应用人工的方式对攻击图进行处理,效率较低,准确率不高,无法安全性要求。
因此,本申请提供一种属性攻击图的环路识别方法,通过从初始节点开始,根据每个节点的属性将搜索到的新的节点记录至已遍历的节点集合中,每当搜索到下一个节点时,进行判断以便确定是否存在重合的节点,最终实现环路的判断,提高了属性攻击图中的环路识别的效率。
以下通过一个实施例,对本申请提供的一种属性攻击图的环路识别方法进行说明。
请参考图1,图1为本申请实施例所提供的一种属性攻击图的环路识别方法的流程图。
本实施例中,该方法可以包括:
S101,根据每个节点的属性从初始节点开始搜索路径,并将搜索到的新的节点记录至已遍历节点集合中;
本步骤旨在根据每个节点的属性从初始节点开始搜索路径,并将搜索到的新的节点记录至已遍历节点集合中。
其中,初始节点就是攻击图中起始的节点。一般而言攻击图可以只存在一个起始节点,也可以包括多个起始节点。在此不做具体限定。
在属性攻击图中,每个节点存在对应的属性。具体的,包括条件节点和漏洞节点。相应的,根据每个节点的属性进行搜索路径是指按照从条件节点到漏洞节点的顺序进行搜索。
可选的,本步骤还可以包括:
步骤1,当搜索到分岔路径的节点时,将节点记为分岔点;
步骤2,对分岔点对应的每条路径设立新的已遍历节点集合;
步骤3,对分岔点的每条路径进行搜索,并将搜索到的新的节点记录至对应的已遍历节点集合中。
可见,本可选方案主要是对当出现岔路时如何进行搜索进行说明。具体的,本可选方案中当搜索到分岔路径的节点时,将节点记为分岔点;然后,对分岔点对应的每条路径设立新的已遍历节点集合;最后,对分岔点的每条路径进行搜索,并将搜索到的新的节点记录至对应的已遍历节点集合中。
可以想到的是,当攻击图中存在岔路时,本实施例的搜索过程可以包括:
遍历初始节点集中的每一个节点,每次以其中一初始节点开始搜索攻击路径;搜索从此初始节点出发的路径。每次到达新的节点时将此节点存入已遍历节点集合中,若有分岔,则需要遍历每一条岔路。若已遍历节点集合中已存在此节点,则可以判断出现了环路;环路为两个相同节点之间的有序节点序列,记录此环路。返回上一个分叉点搜索其它的岔路;当搜索到目的节点时,返回上一个分岔点搜索其它岔路,当所有的岔路搜索完成后,此初始节点的路径的环路搜索过程结束,继续其它初始节点的路径的环路搜索。
其中,将攻击图的初始节点集合中的初始节点无重复无遗漏一一取出作为当前路径搜索的出发点;每次使用新的初始节点出发进行路径搜索时初始化此初始节点相关已遍历节点集合,已遍历节点集合用于顺序存放已遍历搜索节点的集合。
其中,对出现岔路的节点可以做具体如下的处理:
将遍历过程中遇到分岔路径的节点记为分岔点,分岔点具有两种状态,分别为1和0,1表示此分岔点存在未遍历岔路,0表示此分岔点不存在未遍历岔路;将分岔点的一条路径作为接下来的搜索路径,每次开始遍历一条新的岔路时,建立此岔路相关已遍历节点集合,即继承此分岔点之前的已遍历节点集合,并新建此岔路已遍历节点集合。
S102,每当搜索到下一个节点,判断下一个节点与已遍历节点集合中的节点是否重合;
在S101的基础上,本步骤旨在每一次搜索到该攻击图中的下一个节点时,均判断该下一个节点与已遍历节点集合中的节点是否重合。也就是,判断该节点是否已经被搜索过,若是,则表示出现了环路。
S103,若是,将下一个节点对应的路径作为环路。
在S102的基础上,当出现与该下一个节点重合的节点时,则表示出现了环路,将该下一个节点对应的路径作为环路,即可识别出该攻击图中的环路。
更具体的,S101至S103,说明了有如以下的过程:
遍历初始节点集中的每一个节点,每次以此节点开始搜索攻击路径。按照条件节点至漏洞节点至条件节点的流程搜索从此初始节点出发的路径。每次到达新的节点时将此节点存入已遍历节点集合中。当达到新的节点,将此节点存入已遍历节点集合中,但此时已遍历节点中已存在此节点,则可以判断出现了环路。当此初始节点的路径的环路搜索过程结束,继续其它初始节点的路径的环路搜索。
更具体的,本实施例可以包括:
步骤1,获取需要识别的属性攻击图,节点为属性节点和漏洞节点,初始节点集合和目的节点集合均已知。
步骤2,初始节点集合中的节点依次取出,以取出的此初始节点开始,搜索以此初始节点为起点的攻击路径,在遍历的过程中循环此过程。当所有的初始节点都遍历处理完成后,则表示此攻击图的环路识别过程结束。
步骤3,每次取出一个初始节点,需要重新定义一个与此节点对应的已遍历节点集合,用于记录以此为起点的攻击路径节点的集合。如果对应的漏洞节点数超过一个,则此条件节点为岔路口。需要遍历搜索每一条岔路,选择其中一条路径开始遍历,每条岔路都建立一个对应的已遍历节点集合,用于记录每条岔路的节点。
步骤4,将当前的条件节点作为前置条件节点集合。判断该条件节点是否已在已遍历节点集合中,如果存在,则可以判断出现了环路,记录并输出该环路,并返回上一轮后置节点集合遍历循环。如果不存在该节点,则将该节点加入到已遍历节点集合中。
步骤5,重复上述处理过程,在此过程中如果搜索到目的节点或者环路,则返回上一层岔路口遍历其它未遍历搜索路径,当所有路径均遍历搜索完成,选取下一个初始节点重复此过程。直到所有的初始节点搜索过程结束,则该攻击图的所有环路均已搜索完毕,得到识别结果:该属性攻击图的所有环路。
其中,前置条件集合可能不只有一个条件,但是前置条件集合是否满足不影响识别结果的条件,因此只需找到该前置条件集合对应的漏洞节点集合即可。
进一步的,在识别出环路的基础上,本可选方案中还对环路进行相应的处理,避免环路影响攻击图的安全效果。
可选的,本实施例还可以包括:
步骤1,计算环路的路径重合度;
步骤2,当路径重合度为1时,判断环路的起点是否为漏洞节点;若是,则删除环路;若否,则根据环路的单调性对环路进行处理。
步骤3,当路径重合度大于1时,根据获取到的目的节点关注信息对环路进行处理。
可见,本可选方案是对如何对环路进行处理进行说明。具体的,在本可选方案中首先计算出环路的路径重合度。然后,根据不同的路径重合度执行对应的处理方式。
本可选方案首先找到环路的起点。然后计算环路的重合度。对于路径重合度为1的环路,判断环路起点为条件节点还是漏洞节点。当环路的起点是漏洞节点时,环路不可实现,可以删除。若路径重合度为1的环路起点为条件节点,根据单调性原则,可以消除环路。对于路径重合度为大于1的环路,需在有条件下进行简化。
具体的,本可选方案可以例如以下过程。
找到环路的起点。当第一次发现下一步的节点已经在已经经过的节点集合之中时,这个点就是环路的起点。环路的起点有两个父节点。
计算环路的重合度。如果只有一个初始节点的路径中包含此环路,则此环路路径重合度为1。若超过一个以上的初始节点的路径包含此环路,则此环路路径重合度大于1,直接删除此环路可能会导致其它路径信息丢失,不能直接删除。
对于路径重合度为1的环路,判断环路起点为条件节点还是漏洞节点。当环路的起点是漏洞节点,此环路不可实现,可以删除。对于条件节点,其父节点为漏洞节点,只需其任意一父节点满足条件则可以实现该条件节点,此时该环路是可实现的,不宜直接删除。
若在处理中发现该环路的起点为条件节点。利用单调性可以消除环路,但不能直接删除环路。按照单调性原则可以删除起点为漏洞节点的环路中的达到起点形成环路之前的最后一个条件节点到起点之间的路径。
对于路径重合度为大于1的环路,需在有条件下进行简化。若当前需求只判断目的节点的情况:对于每个初始节点,搜索到达目的节点的单调路径。删除环路中没有在任何这些单调路径中的节点,可以消除环路结构。如果没有说明只关心目的节点,此情况下环路不能消除,需单独考虑不同路径受到该环路的影响而具体分析。
其中,计算环路的路径重合度的过程可以包括:将所有的初始节点遍历完成,从每个初始节点出发进行路径搜索,若此初始节点路径搜索中出现了此环路,则将此环路的重合度加1。环路的重合度初始状态为0,代表此环路没有初始节点出发的路径包含。
更具体的,对环路进行处理的过程可以包括:
步骤1,通过上述识别方法识别到属性攻击图中存在环路后,首先计算此环路的重合度。其中,环路的重合度是本实施例定义的概念。具体为有几个这样的初始节点,以此初始节点出发的路径包含此环路的,就称此环路的重合度为几。如果此环路的重合度不大于1,那么此环路只有一个初始节点出发的路径包含此环路,找到环路的起点。
步骤2,判断环路起点的属性,如果是漏洞节点,则此环路是不可实现环路,所以可以直接删除。
步骤3,如果起点是条件节点,则不能直接删除此环路,需进行下一步的分析:可根据单调性假设,攻击者不会重复攻击已成功攻击的节点,此环路的攻击路线是无意义的,可以消除此环路而不影响攻击图合理的分析。如果此环路的重合度大于1,单调性假设仍可使用。但是由于此环路的重合度大于1,所以此环路可能属于某条路径的单调部分,不能直接删除此环路。想要进一步简化此种情况下的环路,需要指定条件。
步骤4,如果此属性攻击图只关心目的节点,而不关心非目的节点,那么可以根据环路中是否含有目的节点进行进一步的简化。在只关心到达目的节点的攻击路径条件下,找到所有初始节点到目的节点单调的路径,记录路径上的节点。将环路中没有在其中任意一条路径上的节点进行删除。如果存在这样的节点,则环路进行了消除。
步骤5,如果不只关心目的节点的情况,需要具体考虑环路对不同路径的影响而根据具体情况简化。
通过上述流程,可以将属性攻击图中的环路进行最简化,达到尽可能消除环路问题对属性攻击图分析的影响。经过实例证明,此流程可以减少属性攻击图中95%以上的环路。
综上,本实施例通过从初始节点开始,根据每个节点的属性将搜索到的新的节点记录至已遍历的节点集合中,每当搜索到下一个节点时,进行判断以便确定是否存在重合的节点,最终实现环路的判断,提高了属性攻击图中的环路识别的效率。
以下通过一个具体的实施例,对本申请提供的属性攻击图的环路识别方法做进一步说明。
请参考图2,图2为本申请实施例所提供的第一种属性攻击图的结构示意图。
本实施例中,该方法可以包括:
识别过程:此属性攻击图的初始节点集合为CS{c1},遍历初始节点。从c1出发,初始化c1对应的已遍历节点集合C1{},将c1加入C1中。v1是c1为前置条件节点对应的漏洞节点,将v1加入已遍历节点集合C1中,v1对应的后置条件节点为c2,将c2加入C1中。将c2作为前置条件集合,接下来的漏洞节点为v2,将v2加入已遍历节点中。寻找v2的后置节点集合,包含两个条件节点{c4,c5},一一遍历此集合中的条件节点。先将c4加入C1中,并以c4作为条件节点,则对应接下来的漏洞节点为v3。将v3加入C1中,v3对应的后置条件节点为c3。将c3加入C1中,C3对应的漏洞节点为v1。将v1加入C1中,但此时发现,C1中已有v1,则判断出现了环路,环路为两个v1节点之间的路径。可按顺序从已遍历节点中取出,环路为:v1至c2至v2至c4至v3至c3至v1。以c4为前置条件的路径搜索完成,v2对应的后置条件集合中条件节点c5,将c5加入C1中,c5为目的节点,此路径遍历结束。此攻击图搜索完成,发现存在一个环路,该环路为:v1至c2至v2至c4至v3至c3至v1。
处理过程:此时攻击图中含有环路:v1至c2至v2至c4至v3至c3至v1。按照处理流程,首先计算该环路的路径重合度为1,所以接下判断该环路的起点,该环路的起点为v1,v1为漏洞节点,按照处理流程判断此环路是不可实现的环路,可以删除此环路。现在验证此环路是否可以直接删除,v1节点的前置条件节点集合为{c1,c3},要同时满足此两个条件才能利用v1漏洞,但是满足c3条件的前提是成功利用漏洞节点v1,所以此环路是不可实现的环路,可以删除,攻击图剩下的路径为:c1至v1至c2至v2至c5。此攻击图的环路问题处理过程结束。
以下通过一个具体的实施例,对本申请提供的属性攻击图的环路识别方法做进一步说明。
请参考图3,图3为本申请实施例所提供的第二种属性攻击图的结构示意图。
本实施例中,该方法可以包括:
识别过程:此属性攻击图的初始节点集合为CS{c1},遍历初始节点。从c1出发,初始化c1对应的已遍历节点集合C1{},将c1加入C1中。v1是c1为前置条件节点对应的漏洞节点,将v1加入已遍历节点集合C1中,v1对应的后置条件节点为c2,将c2加入C1中。将c2作为前置条件集合,接下来的漏洞节点为v2,将v2加入已遍历节点中。寻找v2的后置节点集合,c3为其后置节点集合。将c3加入C1中,并以c3作为条件节点,则对应接下来的漏洞节点为v3。将v3加入C1中,v3对应的后置条件节点为c2。将c2加入C1中,但此时发现,C1中已有c2,则判断出现了环路,环路为两个c2节点之间的路径。可按顺序从已遍历节点中取出,环路为:c2至v2至c3至v3至c2。所有节点搜索完毕,此攻击图搜索完成,发现存在一个环路,该环路为:c2至v2至c3至v3至c2。
处理过程:此时攻击图中含有环路:c2至v2至c3至v3至c2。首先通过计算此环路的重合度为1,则判断该环路的起点。该环路的起点为c2,c2为条件节点,按照处理流程判断环路的起点为条件节点,不可以直接删除此环路。想要继续处理此环路,可以利用单调性假设消除此环路。具体消除方法为,删除此环路到达起点形成环路前的最后一个条件节点到起点的路径,在此环路中即为c3到c2之间的路径。消除此环路后,攻击图剩下路径为:c1至v1至c2至v2至v3。此攻击图环路问题处理过程结束。
以下通过一个具体的实施例,对本申请提供的属性攻击图的环路识别方法做进一步说明。
请参考图4,图4为本申请实施例所提供的第三种属性攻击图的结构示意图。
本实施例中,该方法可以包括:
识别过程:此属性攻击图的初始节点集合为CS{c1,c3},遍历初始节点。从c1出发,初始化c1对应的已遍历节点集合C1{},将c1加入C1中。v1是c1为前置条件节点对应的漏洞节点,将v1加入已遍历节点集合C1中,v1对应的后置条件节点为c2,将c2加入C1中。将c2作为前置条件集合,接下来的漏洞节点为v2,将v2加入已遍历节点中。寻找v2的后置节点集合,c4为其后置节点集合。将c4加入C1中,并以c4作为条件节点,则对应接下来的漏洞节点为v3。将v3加入C1中,v3对应的后置条件节点为c2。将c2加入C1中,但此时发现,C1中已有c2,则判断出现了环路,环路为两个c2节点之间的路径。可按顺序从已遍历节点中取出,环路为:c2至v2至c4至v3至c2。初始节点集合还未遍历完成。存在节点c3,从c3出发,初始化c3对应的已遍历节点集合C3{},将c3加入C3中。v2是c3为前置条件节点对应的漏洞节点,将v2加入已遍历节点集合C3中,v2对应的后置条件节点为c4,将c4加入C3中。将c4作为前置条件集合,接下来的漏洞节点为v3。将v3加入C3中,v3对应的后置条件节点为c2。将c2加入C3中,但此时发现,C3中已有c2,则判断出现了环路,环路为两个c2节点之间的路径。与以c1为初始节点的路径中的环路为同一环路,则此环路重合度为2。所有节点搜索完毕,此攻击图搜索完成,发现存在一个环路,该环路为:c2至v2至c4至v3至c2。
处理过程:此时攻击图中含有环路:c2至v2至c3至v3至c2。该环路的重合度为2,按照处理流程需要在限定条件下才能进行简化。如果增加此攻击图中只关心目的节点的限定条件,则可进行如下简化:此攻击图包含两个初始节点c1、c3,这两个初始节点按照单调性原则到达目的节点的路径分别为:c1至v1至c2至v2至c4和c3至v2至c4,v3节点不在其中的任意一条路径中,所以按照处理流程可以删除v3节点。环路c2至v2至c3至v3至c2得到消除。此攻击图的环路处理结束。如果没有只关心目的节点的限定条件,不能删除v3节点,直接删除v3节点会丢失一条c3节点到c2节点的路径。
下面对本申请实施例提供的属性攻击图的环路识别装置进行介绍,下文描述的属性攻击图的环路识别装置与上文描述方法性攻击图的环路识别装置可相互对应参照。
请参考图5,图5为本申请实施例所提供的一种属性攻击图的环路识别装置的结构示意图。
本实施例中,该装置可以包括:
节点遍历模块100,用于根据每个节点的属性从初始节点开始搜索路径,并将搜索到的新的节点记录至已遍历节点集合中;
重合判断模块200,用于每当搜索到下一个节点,判断下一个节点与已遍历节点集合中的节点是否重合;
环路获取模块300,用于当下一个节点与已遍历节点集合中的节点重合时,将下一个节点对应的路径作为环路。
可选的,该装置还可以包括:
第一环路处理模块,用于计算环路的路径重合度;当路径重合度为1时,判断环路的起点是否为漏洞节点;若是,则删除环路;若否,则根据环路的单调性对环路进行处理。
可选的,该装置还可以包括:
第二环路处理模块,用于当路径重合度大于1时,根据获取到的目的节点关注信息对环路进行处理。
可选的,该装置还可以包括:
岔路处理模块,用于当搜索到分岔路径的节点时,将节点记为分岔点;对分岔点对应的每条路径设立新的已遍历节点集合;对分岔点的每条路径进行搜索,并将搜索到的新的节点记录至对应的已遍历节点集合中。
本申请实施例还提供一种服务器,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如以上实施例所述的环路识别方法的步骤。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如以上实施例所述的环路识别方法的步骤。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的一种属性攻击图的环路识别方法、环路识别装置、服务器以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。