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)
Example #2
0
 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
Example #3
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)