forked from p34709852/monkey
Small telemetry refactoring and added ScoutSuite telem
This commit is contained in:
parent
3adafd31b0
commit
549e621895
|
@ -128,12 +128,12 @@ class ControlClient(object):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def send_telemetry(telem_category, data):
|
def send_telemetry(telem_category, json_data: str):
|
||||||
if not WormConfiguration.current_server:
|
if not WormConfiguration.current_server:
|
||||||
LOG.error("Trying to send %s telemetry before current server is established, aborting." % telem_category)
|
LOG.error("Trying to send %s telemetry before current server is established, aborting." % telem_category)
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
telemetry = {'monkey_guid': GUID, 'telem_category': telem_category, 'data': data}
|
telemetry = {'monkey_guid': GUID, 'telem_category': telem_category, 'data': json_data}
|
||||||
requests.post("https://%s/api/telemetry" % (WormConfiguration.current_server,), # noqa: DUO123
|
requests.post("https://%s/api/telemetry" % (WormConfiguration.current_server,), # noqa: DUO123
|
||||||
data=json.dumps(telemetry),
|
data=json.dumps(telemetry),
|
||||||
headers={'content-type': 'application/json'},
|
headers={'content-type': 'application/json'},
|
||||||
|
|
|
@ -5,6 +5,7 @@ import logging
|
||||||
from infection_monkey.control import ControlClient
|
from infection_monkey.control import ControlClient
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
LOGGED_DATA_LENGTH = 300 # How many characters of telemetry data will be logged
|
||||||
|
|
||||||
__author__ = 'itay.mizeretz'
|
__author__ = 'itay.mizeretz'
|
||||||
|
|
||||||
|
@ -22,12 +23,25 @@ class BaseTelem(object, metaclass=abc.ABCMeta):
|
||||||
Sends telemetry to island
|
Sends telemetry to island
|
||||||
"""
|
"""
|
||||||
data = self.get_data()
|
data = self.get_data()
|
||||||
|
serialized_data = json.dumps(data, cls=self.json_encoder)
|
||||||
|
self.log_telem_sending(serialized_data, log_data)
|
||||||
|
ControlClient.send_telemetry(self.telem_category, serialized_data)
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def get_data(self) -> dict:
|
||||||
|
"""
|
||||||
|
:return: Data of telemetry (should be dict)
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@property
|
||||||
|
def json_encoder(self):
|
||||||
|
return json.JSONEncoder
|
||||||
|
|
||||||
|
def log_telem_sending(self, serialized_data: str, log_data=True):
|
||||||
|
logger.debug(f"Sending {self.telem_category} telemetry.")
|
||||||
if log_data:
|
if log_data:
|
||||||
data_to_log = json.dumps(data)
|
logger.debug(f"Telemetry contents: {BaseTelem.truncate_data(serialized_data)}")
|
||||||
else:
|
|
||||||
data_to_log = 'redacted'
|
|
||||||
logger.debug("Sending {} telemetry. Data: {}".format(self.telem_category, data_to_log))
|
|
||||||
ControlClient.send_telemetry(self.telem_category, data)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
|
@ -37,9 +51,9 @@ class BaseTelem(object, metaclass=abc.ABCMeta):
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abc.abstractmethod
|
@staticmethod
|
||||||
def get_data(self) -> dict:
|
def truncate_data(data: str):
|
||||||
"""
|
if len(data) <= LOGGED_DATA_LENGTH:
|
||||||
:return: Data of telemetry (should be dict)
|
return data
|
||||||
"""
|
else:
|
||||||
pass
|
return f"{data[:LOGGED_DATA_LENGTH]}..."
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from common.common_consts.telem_categories import TelemCategoryEnum
|
from common.common_consts.telem_categories import TelemCategoryEnum
|
||||||
|
from infection_monkey.system_info.collectors.scoutsuite_collector.scoutsuite.ScoutSuite.output.result_encoder import \
|
||||||
|
ScoutJsonEncoder
|
||||||
from infection_monkey.telemetry.base_telem import BaseTelem
|
from infection_monkey.telemetry.base_telem import BaseTelem
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,6 +14,7 @@ class ScoutSuiteTelem(BaseTelem):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.data = data
|
self.data = data
|
||||||
|
|
||||||
|
json_encoder = ScoutJsonEncoder
|
||||||
telem_category = TelemCategoryEnum.SCOUTSUITE
|
telem_category = TelemCategoryEnum.SCOUTSUITE
|
||||||
|
|
||||||
def get_data(self):
|
def get_data(self):
|
||||||
|
|
|
@ -31,8 +31,7 @@ class Report(flask_restful.Resource):
|
||||||
"statusesToPillars": ZeroTrustService.get_statuses_to_pillars(),
|
"statusesToPillars": ZeroTrustService.get_statuses_to_pillars(),
|
||||||
"pillarsToStatuses": ZeroTrustService.get_pillars_to_statuses(),
|
"pillarsToStatuses": ZeroTrustService.get_pillars_to_statuses(),
|
||||||
"grades": ZeroTrustService.get_pillars_grades()
|
"grades": ZeroTrustService.get_pillars_grades()
|
||||||
}
|
})
|
||||||
)
|
|
||||||
elif report_data == REPORT_DATA_PRINCIPLES_STATUS:
|
elif report_data == REPORT_DATA_PRINCIPLES_STATUS:
|
||||||
return jsonify(ZeroTrustService.get_principles_status())
|
return jsonify(ZeroTrustService.get_principles_status())
|
||||||
elif report_data == REPORT_DATA_FINDINGS:
|
elif report_data == REPORT_DATA_FINDINGS:
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
from monkey_island.cc.database import mongo
|
||||||
|
|
||||||
|
|
||||||
|
def process_scoutsuite_telemetry(telemetry_json):
|
||||||
|
update_data(telemetry_json)
|
||||||
|
|
||||||
|
|
||||||
|
def update_data(telemetry_json):
|
||||||
|
mongo.db.scoutsuite.update(
|
||||||
|
{'guid': telemetry_json['monkey_guid']},
|
||||||
|
{'$push': {'results': telemetry_json['data']}})
|
Loading…
Reference in New Issue