diff --git a/monkey/infection_monkey/system_info/__init__.py b/monkey/infection_monkey/system_info/__init__.py index 56d7fca8b..7c0187d12 100644 --- a/monkey/infection_monkey/system_info/__init__.py +++ b/monkey/infection_monkey/system_info/__init__.py @@ -113,7 +113,7 @@ class InfoCollector(object): :return: None. Updates class information """ LOG.debug("Reading subnets") - self.info['network_info'] =\ + self.info['network_info'] = \ { 'networks': get_host_subnets(), 'netstat': NetstatCollector.get_netstat_info() @@ -122,28 +122,38 @@ class InfoCollector(object): def get_azure_info(self): """ Adds credentials possibly stolen from an Azure VM instance (if we're on one) - Updates the credentials structure, creating it if neccesary (compat with mimikatz) + Updates the credentials structure, creating it if necessary (compat with mimikatz) :return: None. Updates class information """ - from infection_monkey.config import WormConfiguration - if not WormConfiguration.extract_azure_creds: - return - LOG.debug("Harvesting creds if on an Azure machine") - azure_collector = AzureCollector() - if 'credentials' not in self.info: - self.info["credentials"] = {} - azure_creds = azure_collector.extract_stored_credentials() - for cred in azure_creds: - username = cred[0] - password = cred[1] - if username not in self.info["credentials"]: - self.info["credentials"][username] = {} - # we might be losing passwords in case of multiple reset attempts on same username - # or in case another collector already filled in a password for this user - self.info["credentials"][username]['password'] = password - if len(azure_creds) != 0: - self.info["Azure"] = {} - self.info["Azure"]['usernames'] = [cred[0] for cred in azure_creds] + # noinspection PyBroadException + try: + from infection_monkey.config import WormConfiguration + if not WormConfiguration.extract_azure_creds: + return + LOG.debug("Harvesting creds if on an Azure machine") + azure_collector = AzureCollector() + if 'credentials' not in self.info: + self.info["credentials"] = {} + azure_creds = azure_collector.extract_stored_credentials() + for cred in azure_creds: + username = cred[0] + password = cred[1] + if username not in self.info["credentials"]: + self.info["credentials"][username] = {} + # we might be losing passwords in case of multiple reset attempts on same username + # or in case another collector already filled in a password for this user + self.info["credentials"][username]['password'] = password + if len(azure_creds) != 0: + self.info["Azure"] = {} + self.info["Azure"]['usernames'] = [cred[0] for cred in azure_creds] + except Exception: + # If we failed to collect azure info, no reason to fail all the collection. Log and continue. + LOG.error("Failed collecting Azure info.", exc_info=True) def get_aws_info(self): - self.info['aws'] = AwsCollector().get_aws_info() + # noinspection PyBroadException + try: + self.info['aws'] = AwsCollector().get_aws_info() + except Exception: + # If we failed to collect aws info, no reason to fail all the collection. Log and continue. + LOG.error("Failed collecting AWS info.", exc_info=True)