def segement_cfg_similarity_process(vuln_name, patch_name, neo4jdb, worksheet): start_time = time.time() print "[%s] processing %s" % (datetime.datetime.now().strftime( "%y-%m-%d %H:%M:%S"), vuln_name + " vs " + patch_name) #检查数据库里面是否可以找到该函数,找不到相似度为0 vuln_func = get_function_node(neo4jdb, vuln_name) if vuln_func is None: line = (vuln_name, patch_name, "vuln_func_not_found", 0.00, 0) worksheet.append(line) return #检查数据库里面是否可以找到该函数,找不到相似度为0 patch_func = get_function_node(neo4jdb, patch_name) if patch_func is None: line = (vuln_name, patch_name, "patch_func_not_found", 0.00, 0) worksheet.append(line) return #计算是否匹配和相似度 match, simi = func_cfg_similarity(vuln_func, neo4jdb, patch_func, neo4jdb) #u"success" end_time = time.time() cost = round(end_time - start_time, 2) line = (vuln_name, patch_name, match, simi, cost) worksheet.append(line)
def segement_cfg_similarity_process(vuln_name, patch_name, neo4jdb, worksheet): start_time = time.time() print "[%s] processing %s" % (datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S"), vuln_name + " vs " + patch_name) #检查数据库里面是否可以找到该函数,找不到相似度为0 vuln_func = get_function_node(neo4jdb, vuln_name) if vuln_func is None: line = (vuln_name, patch_name, "vuln_func_not_found", 0.00, 0) worksheet.append(line) return #检查数据库里面是否可以找到该函数,找不到相似度为0 patch_func = get_function_node(neo4jdb, patch_name) if patch_func is None: line = (vuln_name, patch_name, "patch_func_not_found", 0.00, 0) worksheet.append(line) return #计算是否匹配和相似度 match, simi = func_cfg_similarity(vuln_func, neo4jdb, patch_func, neo4jdb) #u"success" end_time = time.time() cost = round(end_time - start_time, 2) line = (vuln_name, patch_name, match, simi, cost) worksheet.append(line)
def func_similarity_cfg_level(soft_db, funcs, character_db, func_name, worksheet): # @db1 待比对数据库 # @db2 漏洞特征数据库 # @func_name 目标函数名 #过滤一下 ast_root = get_function_ast_root(character_db, func_name) if ast_root is None: print "no function found" return return_type = get_function_return_type(character_db, ast_root) # 获取目标函数返回值类型 param_list = get_function_param_list(character_db, ast_root) # 获取目标函数参数类型列表 filter_funcs = filter_functions(soft_db, funcs, return_type, param_list) # 过滤待比较函数 tar_func = get_function_node(character_db, func_name) for ast_root in filter_funcs: src_func = get_function_node_by_ast_root(soft_db, ast_root) match, simi = func_cfg_similarity(src_func, soft_db, tar_func, character_db) if match: file = get_function_file(soft_db, src_func.properties[u'name'])[41:] worksheet.append( (func_name, file, src_func.properties[u'name'],match, round(simi,4) )) elif simi == -1: print u"节点太多,未进行比较 "
def func_cfg_similarity_process(vuln_info, conn, neo4jdb, worksheet): start_time = time.time() cve_info = vuln_info.get_cve_info(conn) soft = cve_info.get_soft(conn) print "[%s] processing %s" % (datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S"), cve_info.cveid) vuln_name = cve_info.cveid.replace(u"-", u"_").upper() + u"_VULN_" + vuln_info.vuln_func patch_name = cve_info.cveid.replace(u"-", u"_").upper() + u"_PATCHED_" + vuln_info.vuln_func vuln_func = get_function_node(neo4jdb, vuln_name) if vuln_func is None: line = ( cve_info.cveid, soft.software_name + "-" + soft.software_version, vuln_info.vuln_func, vuln_info.vuln_file[41:], "vuln_func_not_found", 0.00, 0, ) worksheet.append(line) return patch_func = get_function_node(neo4jdb, patch_name) if patch_func is None: line = ( cve_info.cveid, soft.software_name + "-" + soft.software_version, vuln_info.vuln_func, vuln_info.vuln_file[41:], "patch_func_not_found", 0.00, 0, ) worksheet.append(line) return match, simi = func_cfg_similarity(vuln_func, neo4jdb, patch_func, neo4jdb) # u"success" end_time = time.time() cost = round(end_time - start_time, 2) line = ( cve_info.cveid, soft.software_name + "-" + soft.software_version, vuln_info.vuln_func, vuln_info.vuln_file[41:], match, simi, cost, ) worksheet.append(line)
def func_similarity_segement_level(db1, funcs, db2, func_name, worksheet): # @db1 待比对数据库 # @db2 漏洞特征数据库 # @func_name 目标函数名 tar_func = get_function_node(db2, func_name) for src_func in funcs: match, simi = func_cfg_similarity(src_func, db1, tar_func, db2) if match: file = get_function_file(db1, src_func.properties[u'name'])[41:] worksheet.append( (func_name, file, src_func.properties[u'name'], match, round(simi, 4))) elif simi == -1: print u"节点太多,未进行比较 "
def func_similarity_segement_level(db1, funcs, db2, func_name, worksheet): # @db1 待比对数据库 # @db2 漏洞特征数据库 # @func_name 目标函数名 tar_func = get_function_node(db2, func_name) for src_func in funcs: match, simi = func_cfg_similarity(src_func, db1, tar_func, db2) if match: file = get_function_file(db1, src_func.properties[u'name'])[41:] worksheet.append( (func_name, file, src_func.properties[u'name'],match, round(simi,4) )) elif simi == -1: print u"节点太多,未进行比较 "
def func_cfg_similarity_process(vuln_info, conn, neo4jdb, worksheet): start_time = time.time() cve_info = vuln_info.get_cve_info(conn) soft = cve_info.get_soft(conn) print "[%s] processing %s" % ( datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S"), cve_info.cveid) vuln_name = cve_info.cveid.replace( u"-", u"_").upper() + u"_VULN_" + vuln_info.vuln_func patch_name = cve_info.cveid.replace( u"-", u"_").upper() + u"_PATCHED_" + vuln_info.vuln_func vuln_func = get_function_node(neo4jdb, vuln_name) if vuln_func is None: line = (cve_info.cveid, soft.software_name + "-" + soft.software_version, vuln_info.vuln_func, vuln_info.vuln_file[41:], "vuln_func_not_found", 0.00, 0) worksheet.append(line) return patch_func = get_function_node(neo4jdb, patch_name) if patch_func is None: line = (cve_info.cveid, soft.software_name + "-" + soft.software_version, vuln_info.vuln_func, vuln_info.vuln_file[41:], "patch_func_not_found", 0.00, 0) worksheet.append(line) return match, simi = func_cfg_similarity(vuln_func, neo4jdb, patch_func, neo4jdb) #u"success" end_time = time.time() cost = round(end_time - start_time, 2) line = (cve_info.cveid, soft.software_name + "-" + soft.software_version, vuln_info.vuln_func, vuln_info.vuln_file[41:], match, simi, cost) worksheet.append(line)