From f2e464f2a6e4062d8b859f5072f05b4dba4ce983 Mon Sep 17 00:00:00 2001 From: Itay Mizeretz Date: Tue, 12 Dec 2017 15:42:24 +0200 Subject: [PATCH] Report now uses initial config when makes sense --- monkey_island/cc/resources/monkey.py | 2 ++ monkey_island/cc/services/config.py | 22 ++++++++++++++++------ monkey_island/cc/services/report.py | 12 ++++++------ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/monkey_island/cc/resources/monkey.py b/monkey_island/cc/resources/monkey.py index 8670505b0..37722262c 100644 --- a/monkey_island/cc/resources/monkey.py +++ b/monkey_island/cc/resources/monkey.py @@ -62,6 +62,8 @@ class Monkey(flask_restful.Resource): monkey_json['modifytime'] = datetime.now() + ConfigService.save_initial_config_if_needed() + # if new monkey telem, change config according to "new monkeys" config. db_monkey = mongo.db.monkey.find_one({"guid": monkey_json["guid"]}) if not db_monkey: diff --git a/monkey_island/cc/services/config.py b/monkey_island/cc/services/config.py index 2145011c3..ea755312f 100644 --- a/monkey_island/cc/services/config.py +++ b/monkey_island/cc/services/config.py @@ -800,23 +800,23 @@ class ConfigService: pass @staticmethod - def get_config(): - config = mongo.db.config.find_one({'name': 'newconfig'}) or {} + def get_config(is_initial_config=False): + config = mongo.db.config.find_one({'name': 'initial' if is_initial_config else 'newconfig'}) or {} for field in ('name', '_id'): config.pop(field, None) return config @staticmethod - def get_config_value(config_key_as_arr): + def get_config_value(config_key_as_arr, is_initial_config=False): config_key = reduce(lambda x, y: x+'.'+y, config_key_as_arr) - config = mongo.db.config.find_one({'name': 'newconfig'}, {config_key: 1}) + config = mongo.db.config.find_one({'name': 'initial' if is_initial_config else 'newconfig'}, {config_key: 1}) for config_key_part in config_key_as_arr: config = config[config_key_part] return config @staticmethod - def get_flat_config(): - config_json = ConfigService.get_config() + def get_flat_config(is_initial_config=False): + config_json = ConfigService.get_config(is_initial_config) flat_config_json = {} for i in config_json: for j in config_json[i]: @@ -888,6 +888,16 @@ class ConfigService: config["cnc"]["servers"]["command_servers"] = ["%s:%d" % (ip, ISLAND_PORT) for ip in ips] config["cnc"]["servers"]["current_server"] = "%s:%d" % (ips[0], ISLAND_PORT) + @staticmethod + def save_initial_config_if_needed(): + if mongo.db.config.find_one({'name': 'initial'}) is not None: + return + + initial_config = mongo.db.config.find_one({'name': 'newconfig'}) + initial_config['name'] = 'initial' + initial_config.pop('_id') + mongo.db.config.insert(initial_config) + @staticmethod def _extend_config_with_default(validator_class): validate_properties = validator_class.VALIDATORS["properties"] diff --git a/monkey_island/cc/services/report.py b/monkey_island/cc/services/report.py index fceaa086c..8261b7e7b 100644 --- a/monkey_island/cc/services/report.py +++ b/monkey_island/cc/services/report.py @@ -282,11 +282,11 @@ class ReportService: @staticmethod def get_config_users(): - return ConfigService.get_config_value(['basic', 'credentials', 'exploit_user_list']) + return ConfigService.get_config_value(['basic', 'credentials', 'exploit_user_list'], True) @staticmethod def get_config_passwords(): - return ConfigService.get_config_value(['basic', 'credentials', 'exploit_password_list']) + return ConfigService.get_config_value(['basic', 'credentials', 'exploit_password_list'], True) @staticmethod def get_config_exploits(): @@ -294,7 +294,7 @@ class ReportService: default_exploits = ConfigService.get_default_config() for namespace in exploits_config_value: default_exploits = default_exploits[namespace] - exploits = ConfigService.get_config_value(exploits_config_value) + exploits = ConfigService.get_config_value(exploits_config_value, True) if exploits == default_exploits: return ['default'] @@ -304,13 +304,13 @@ class ReportService: @staticmethod def get_config_ips(): - if ConfigService.get_config_value(['basic_network', 'network_range', 'range_class']) != 'FixedRange': + if ConfigService.get_config_value(['basic_network', 'network_range', 'range_class'], True) != 'FixedRange': return [] - return ConfigService.get_config_value(['basic_network', 'network_range', 'range_fixed']) + return ConfigService.get_config_value(['basic_network', 'network_range', 'range_fixed'], True) @staticmethod def get_config_scan(): - return ConfigService.get_config_value(['basic_network', 'general', 'local_network_scan']) + return ConfigService.get_config_value(['basic_network', 'general', 'local_network_scan'], True) @staticmethod def get_report():