guardicore / monkey

Infection Monkey - An open-source adversary emulation platform
https://www.guardicore.com/infectionmonkey/
GNU General Public License v3.0
6.63k stars 773 forks source link

Exceptions thrown by island #1056

Closed mssalvatore closed 1 year ago

mssalvatore commented 3 years ago

Describe the bug

I have witnessed the following exception and error when running Monkey Island from a docker container:

2021-03-25 19:37:20,202 - report.py:192 - get_stolen_creds() - INFO - Stolen creds generated for reporting
2021-03-25 19:37:20,203 - report.py:280 - get_azure_creds() - INFO - Azure machines creds generated for reporting
2021-03-25 19:37:20,275 - app.py:1892 - log_exception() - ERROR - Exception on /api [GET]
Traceback (most recent call last):
  File "/monkey/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "/monkey/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/monkey/lib/python3.7/site-packages/flask_restful/__init__.py", line 468, in wrapper
    resp = resource(*args, **kwargs)
  File "/monkey/lib/python3.7/site-packages/flask/views.py", line 89, in view
    return self.dispatch_request(*args, **kwargs)
  File "/monkey/lib/python3.7/site-packages/flask_restful/__init__.py", line 583, in dispatch_request
    resp = meth(*args, **kwargs)
  File "/monkey/monkey_island/cc/resources/root.py", line 27, in get
    return self.get_server_info()
  File "/monkey/monkey_island/cc/resources/auth/auth.py", line 63, in wrapper
    return fn(*args, **kwargs)
  File "/monkey/monkey_island/cc/resources/root.py", line 42, in get_server_info
    completed_steps=InfectionLifecycle.get_completed_steps())
  File "/monkey/monkey_island/cc/services/infection_lifecycle.py", line 33, in get_completed_steps
    InfectionLifecycle._on_finished_infection()
  File "/monkey/monkey_island/cc/services/infection_lifecycle.py", line 49, in _on_finished_infection
    safe_generate_reports()
  File "/monkey/monkey_island/cc/services/reporting/report_generation_synchronisation.py", line 21, in safe_generate_reports
    attack_report = safe_generate_attack_report()
  File "/monkey/monkey_island/cc/services/reporting/report_generation_synchronisation.py", line 44, in safe_generate_attack_report
    attack_report = AttackReportService.generate_new_report()
  File "/monkey/monkey_island/cc/services/attack/attack_report.py", line 76, in generate_new_report
    technique_report_data = TECHNIQUES[tech_id].get_report_data()
  File "/monkey/monkey_island/cc/services/attack/technique_reports/pba_technique.py", line 53, in get_report_data
    status, info = get_technique_status_and_data()
  File "/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py", line 144, in check_if_disabled_in_config
    return (ScanStatus.DISABLED.value, []) if not cls._is_enabled_in_config() else get_technique_status_and_data()
  File "/monkey/monkey_island/cc/services/attack/technique_reports/pba_technique.py", line 42, in get_technique_status_and_data
    info = list(mongo.db.telemetry.aggregate(cls.get_pba_query(cls.pba_names)))
  File "/monkey/lib/python3.7/site-packages/pymongo/collection.py", line 2458, in aggregate
    **kwargs)
  File "/monkey/lib/python3.7/site-packages/pymongo/collection.py", line 2377, in _aggregate
    retryable=not cmd._performs_write)
  File "/monkey/lib/python3.7/site-packages/pymongo/mongo_client.py", line 1471, in _retryable_read
    return func(session, server, sock_info, slave_ok)
  File "/monkey/lib/python3.7/site-packages/pymongo/aggregation.py", line 148, in get_cursor
    user_fields=self._user_fields)
  File "/monkey/lib/python3.7/site-packages/pymongo/pool.py", line 694, in command
    exhaust_allowed=exhaust_allowed)
  File "/monkey/lib/python3.7/site-packages/pymongo/network.py", line 161, in command
    parse_write_concern_error=parse_write_concern_error)
  File "/monkey/lib/python3.7/site-packages/pymongo/helpers.py", line 164, in _check_command_response
    raise OperationFailure(errmsg, code, response, max_wire_version)
pymongo.errors.OperationFailure: $arrayElemAt's first argument must be an array, but is string, full error: {'ok': 0.0, 'errmsg': "$arrayElemAt's first argument must be an array, but is string", 'code': 28689, 'codeName': 'Location28689'}

...

127.0.0.1 - - [2021-03-25 19:37:40] "GET /api HTTP/1.1" 200 454 0.009706
127.0.0.1 - - [2021-03-25 19:37:42] "GET /api/netmap/nodeStates HTTP/1.1" 200 665 0.000959
127.0.0.1 - - [2021-03-25 19:37:42] "GET /api/netmap HTTP/1.1" 200 11645 0.014902
127.0.0.1 - - [2021-03-25 19:37:42] "GET /api HTTP/1.1" 200 454 0.010413
127.0.0.1 - - [2021-03-25 19:37:47] "GET /api/netmap HTTP/1.1" 200 11645 0.019875
2021-03-25 19:37:47,261 - telemetry_feed.py:37 -        get() - ERROR - Failed parsing telemetries. Error: 0.

The error does not affect functionality in an obvious way.

To Reproduce

Steps to reproduce the behavior:

  1. Run monkey island docker container
  2. Run monkey agent from the island
  3. See error in log

Machine version (please complete the following information):

cakekoa commented 1 year ago

This is an old issue related to the generation of ATT&CK reports. PBAs and ATT&CK reports are being removed #2442 #2440, so this can be closed