def ssdeep_db_insert(self): ssdeep_result = Elastic.search_everything( "malware_info", "sha256", self.file_sha256_hash.lower()) if len(ssdeep_result) > 1: return ssdeep_db_insert_data = { 'ssdeep_value': self.file_ssdeep_hash.lower(), 'file_name': self.file_name.lower(), 'group': self.groups, 'last_updated': time.time(), 'sha256': self.file_sha256_hash, 'tag': [self.groups, self.tags], 'upload_date': time.time() } Elastic.insert_record_to_ssdeep_index(ssdeep_db_insert_data)
def __init__(self, config): self.logger = logging.getLogger('browbeat.Shaker') self.config = config self.tools = Tools.Tools(self.config) self.grafana = Grafana.Grafana(self.config) self.elastic = Elastic.Elastic(self.config, self.__class__.__name__.lower()) self.error_count = 0 self.pass_count = 0 self.test_count = 0 self.scenario_count = 0
def ajax(): global result global elasticsearch_connection print(dict(request.values)) # response = requests.get('https://monkagiga.firebaseio.com/.json') elasticsearch_connection = Elastic.get_elasticsearch_connection() term = request.args.get('query') result = Query.query(term, elasticsearch_connection) response = result print(response) return jsonify(response)
def DATABASE_INSERT(self, FUNCTION_REPRE_LIST): if FUNCTION_REPRE_LIST == None: return for BLOCK in FUNCTION_REPRE_LIST: if BLOCK == None: return self.FLAG_H = 0 self.FLAG_S = 0 self.HASH_OPCODE = BLOCK[0] #베이직 블록 함수 대푯 값 self.SSDEEP_HASHS = BLOCK[1] #베이직 블록 SSDEEP 값 self.FILE_HASH = BLOCK[2] #파일 해시 self.BASIC_BLOCK_INDEX = BLOCK[3] #베이직 블록 인덱스 self.BASIC_BLOCK_OPCODE_ALL = BLOCK[4] #베이직 블록 내 OPCODE 모든 값 self.opcode_operand = BLOCK[5] # 그룹, 대푯값 둘다 일치하게 검색 if type(self.groups) == list: self.groups = self.groups[0] Query_repre = { "query": { "bool": { "must": [{ "match": { "group": self.groups } }, { "match": { "block_representative": self.HASH_OPCODE } }] } } } try: repre_query_result_list = Elastic._search_query( "basic_block", Query_repre) except: print(Query_repre) #print(repre_query_result_list) #GROUP 검색 시 동일한 함수 대푯값이 있으면 SSDEEP 값이 같은지 유무를 판단한다. if len(repre_query_result_list) > 0: #그룹과 repre 값이 일치한 것 중 ssdeep값이 일치한지 판단한다. for repre_query in repre_query_result_list: Query_ssdeep = { "query": { "bool": { "must": [{ "match": { "group": self.groups } }, { "match": { "ssdeep": repre_query['ssdeep'] } }] } } } #그룹과 repre 값이 일치하는 것 중 ssdeep 값을 추출한다. ssdeep_query_result_list = Elastic._search_query( "basic_block", Query_ssdeep) #print(ssdeep_query_result_list) #추출한 ssdeep의 값이 샘플의 ssdeep과 유사한지 확인한다. #샘플의 ssdeep값과 데이터베이스에 있는 ssdeep 값이 일치할 시엔 FLAG_S를 1로 준 뒤 별도의 행위를 하지 않는다. (다음 repre 값으로 넘어간다.) if len(ssdeep_query_result_list) > 0: for ssdeep_query_result in ssdeep_query_result_list: if self.SSDEEP_HASHS == ssdeep_query_result[ 'ssdeep']: self.FLAG_S = 1 break if self.FLAG_S == 1: continue #그룹, repre 값은 일치하지만, ssdeep 값이 일치하는 게 없을 시 elif self.FLAG_S == 0: self.data = { 'ssdeep_value': self.SSDEEP_HASHS, #베이직 블록 SSDEEP 값 'sha256': self.FILE_HASH, #파일명이 해시임 'group': self.groups, #그룹 정보 'tag': [self.groups], #태그 'block_representative': self.HASH_OPCODE, #베이직 블록 함수 대푯값 'block_count': self.BASIC_BLOCK_INDEX, #베이직 블록 Index 'opcode': self.BASIC_BLOCK_OPCODE_ALL, #베이직 블록 내 OPCODE 'disassemble': self.opcode_operand } Elastic.insert_basic_block(self.data) continue #그룹, repre값은 일치하지만, ssdeep값이 일치하는게 없을 시 else: self.data = { 'ssdeep_value': self.SSDEEP_HASHS, #베이직 블록 SSDEEP 값 'sha256': self.FILE_HASH, #파일명이 해시임 'group': self.groups, #그룹 정보 'tag': [self.groups], #태그 'block_representative': self.HASH_OPCODE, #베이직 블록 함수 대푯값 'block_count': self.BASIC_BLOCK_INDEX, #베이직 블록 Index 'opcode': self.BASIC_BLOCK_OPCODE_ALL, #베이직 블록 내 OPCODE 'disassemble': self.opcode_operand } #print("DATA : {}\n".format(self.data)) Elastic.insert_basic_block(self.data) continue del (ssdeep_query_result_list) #Group 검색 시 동일함 함수 대푯값이 없으면 DB에 내용을 추가한다. else: self.data = { 'ssdeep_value': self.SSDEEP_HASHS, #베이직 블록 SSDEEP 값 'sha256': self.FILE_HASH, #파일명이 해시임 'group': self.groups, #그룹 정보 'tag': [self.groups], #태그 'block_representative': self.HASH_OPCODE, #베이직 블록 함수 대푯값 'block_count': self.BASIC_BLOCK_INDEX, #베이직 블록 Index 'opcode': self.BASIC_BLOCK_OPCODE_ALL, #베이직 블록 내 OPCODE 'disassemble': self.opcode_operand } Elastic.insert_basic_block(self.data) continue del (repre_query_result_list)