forked from p15670423/monkey
Merge pull request #2364 from guardicore/2274-agent-logs-endpoint
Use new agent logs endpoint
This commit is contained in:
commit
1b4f72e5e3
|
@ -68,13 +68,6 @@ class ControlClient:
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.warning(f"Error connecting to control server {self.server_address}: {exc}")
|
logger.warning(f"Error connecting to control server {self.server_address}: {exc}")
|
||||||
|
|
||||||
def send_log(self, log):
|
|
||||||
try:
|
|
||||||
telemetry = {"monkey_guid": GUID, "log": json.dumps(log)}
|
|
||||||
self._island_api_client.send_log(json.dumps(telemetry))
|
|
||||||
except Exception as exc:
|
|
||||||
logger.warning(f"Error connecting to control server {self.server_address}: {exc}")
|
|
||||||
|
|
||||||
def get_pba_file(self, filename):
|
def get_pba_file(self, filename):
|
||||||
try:
|
try:
|
||||||
return self._island_api_client.get_pba_file(filename)
|
return self._island_api_client.get_pba_file(filename)
|
||||||
|
|
|
@ -16,7 +16,7 @@ from common.common_consts.timeouts import (
|
||||||
SHORT_REQUEST_TIMEOUT,
|
SHORT_REQUEST_TIMEOUT,
|
||||||
)
|
)
|
||||||
from common.credentials import Credentials
|
from common.credentials import Credentials
|
||||||
from common.types import SocketAddress
|
from common.types import AgentID, SocketAddress
|
||||||
|
|
||||||
from . import (
|
from . import (
|
||||||
AbstractIslandAPIClientFactory,
|
AbstractIslandAPIClientFactory,
|
||||||
|
@ -92,9 +92,9 @@ class HTTPIslandAPIClient(IIslandAPIClient):
|
||||||
self._api_url = f"https://{island_server}/api"
|
self._api_url = f"https://{island_server}/api"
|
||||||
|
|
||||||
@handle_island_errors
|
@handle_island_errors
|
||||||
def send_log(self, log_contents: str):
|
def send_log(self, agent_id: AgentID, log_contents: str):
|
||||||
response = requests.post( # noqa: DUO123
|
response = requests.put( # noqa: DUO123
|
||||||
f"{self._api_url}/log",
|
f"{self._api_url}/agent-logs/{agent_id}",
|
||||||
json=log_contents,
|
json=log_contents,
|
||||||
verify=False,
|
verify=False,
|
||||||
timeout=MEDIUM_REQUEST_TIMEOUT,
|
timeout=MEDIUM_REQUEST_TIMEOUT,
|
||||||
|
|
|
@ -5,7 +5,7 @@ from common import AgentRegistrationData, AgentSignals, OperatingSystem
|
||||||
from common.agent_configuration import AgentConfiguration
|
from common.agent_configuration import AgentConfiguration
|
||||||
from common.agent_events import AbstractAgentEvent
|
from common.agent_events import AbstractAgentEvent
|
||||||
from common.credentials import Credentials
|
from common.credentials import Credentials
|
||||||
from common.types import SocketAddress
|
from common.types import AgentID, SocketAddress
|
||||||
|
|
||||||
|
|
||||||
class IIslandAPIClient(ABC):
|
class IIslandAPIClient(ABC):
|
||||||
|
@ -30,10 +30,11 @@ class IIslandAPIClient(ABC):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def send_log(self, log_contents: str):
|
def send_log(self, agent_id: AgentID, log_contents: str):
|
||||||
"""
|
"""
|
||||||
Send the contents of the agent's log to the island
|
Send the contents of the agent's log to the island
|
||||||
|
|
||||||
|
:param agent_id: The ID of the agent whose logs are being sent
|
||||||
:param log_contents: The contents of the agent's log
|
:param log_contents: The contents of the agent's log
|
||||||
:raises IslandAPIConnectionError: If the client cannot successfully connect to the island
|
:raises IslandAPIConnectionError: If the client cannot successfully connect to the island
|
||||||
:raises IslandAPIRequestError: If an error occurs while attempting to connect to the
|
:raises IslandAPIRequestError: If an error occurs while attempting to connect to the
|
||||||
|
|
|
@ -111,6 +111,7 @@ class InfectionMonkey:
|
||||||
|
|
||||||
self._singleton = SystemSingleton()
|
self._singleton = SystemSingleton()
|
||||||
self._opts = self._get_arguments(args)
|
self._opts = self._get_arguments(args)
|
||||||
|
self._agent_id = get_agent_id()
|
||||||
|
|
||||||
self._agent_event_serializer_registry = self._setup_agent_event_serializers()
|
self._agent_event_serializer_registry = self._setup_agent_event_serializers()
|
||||||
|
|
||||||
|
@ -122,7 +123,7 @@ class InfectionMonkey:
|
||||||
server_address=self._island_address, island_api_client=self._island_api_client
|
server_address=self._island_address, island_api_client=self._island_api_client
|
||||||
)
|
)
|
||||||
self._control_channel = ControlChannel(
|
self._control_channel = ControlChannel(
|
||||||
str(self._island_address), get_agent_id(), self._island_api_client
|
str(self._island_address), self._agent_id, self._island_api_client
|
||||||
)
|
)
|
||||||
self._register_agent()
|
self._register_agent()
|
||||||
|
|
||||||
|
@ -176,7 +177,7 @@ class InfectionMonkey:
|
||||||
|
|
||||||
def _register_agent(self):
|
def _register_agent(self):
|
||||||
agent_registration_data = AgentRegistrationData(
|
agent_registration_data = AgentRegistrationData(
|
||||||
id=get_agent_id(),
|
id=self._agent_id,
|
||||||
machine_hardware_id=get_machine_id(),
|
machine_hardware_id=get_machine_id(),
|
||||||
start_time=agent_process.get_start_time(),
|
start_time=agent_process.get_start_time(),
|
||||||
# parent_id=parent,
|
# parent_id=parent,
|
||||||
|
@ -496,11 +497,11 @@ class InfectionMonkey:
|
||||||
monkey_log_path = get_agent_log_path()
|
monkey_log_path = get_agent_log_path()
|
||||||
if monkey_log_path.is_file():
|
if monkey_log_path.is_file():
|
||||||
with open(monkey_log_path, "r") as f:
|
with open(monkey_log_path, "r") as f:
|
||||||
log = f.read()
|
log_contents = f.read()
|
||||||
else:
|
else:
|
||||||
log = ""
|
log_contents = ""
|
||||||
|
|
||||||
self._control_client.send_log(log)
|
self._island_api_client.send_log(self._agent_id, log_contents)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _self_delete() -> bool:
|
def _self_delete() -> bool:
|
||||||
|
|
|
@ -37,7 +37,7 @@ AGENT_REGISTRATION = AgentRegistrationData(
|
||||||
TIMESTAMP = 123456789
|
TIMESTAMP = 123456789
|
||||||
|
|
||||||
ISLAND_URI = f"https://{SERVER}/api?action=is-up"
|
ISLAND_URI = f"https://{SERVER}/api?action=is-up"
|
||||||
ISLAND_SEND_LOG_URI = f"https://{SERVER}/api/log"
|
ISLAND_SEND_LOG_URI = f"https://{SERVER}/api/agent-logs/{AGENT_ID}"
|
||||||
ISLAND_GET_PBA_FILE_URI = f"https://{SERVER}/api/pba/download/{PBA_FILE}"
|
ISLAND_GET_PBA_FILE_URI = f"https://{SERVER}/api/pba/download/{PBA_FILE}"
|
||||||
ISLAND_GET_AGENT_BINARY_URI = f"https://{SERVER}/api/agent-binaries/{WINDOWS}"
|
ISLAND_GET_AGENT_BINARY_URI = f"https://{SERVER}/api/agent-binaries/{WINDOWS}"
|
||||||
ISLAND_SEND_EVENTS_URI = f"https://{SERVER}/api/agent-events"
|
ISLAND_SEND_EVENTS_URI = f"https://{SERVER}/api/agent-events"
|
||||||
|
@ -119,8 +119,8 @@ def test_island_api_client__send_log(island_api_client, actual_error, expected_e
|
||||||
island_api_client.connect(SERVER)
|
island_api_client.connect(SERVER)
|
||||||
|
|
||||||
with pytest.raises(expected_error):
|
with pytest.raises(expected_error):
|
||||||
m.post(ISLAND_SEND_LOG_URI, exc=actual_error)
|
m.put(ISLAND_SEND_LOG_URI, exc=actual_error)
|
||||||
island_api_client.send_log(log_contents="some_data")
|
island_api_client.send_log(agent_id=AGENT_ID, log_contents="some_data")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
@ -136,8 +136,8 @@ def test_island_api_client_send_log__status_code(island_api_client, status_code,
|
||||||
island_api_client.connect(SERVER)
|
island_api_client.connect(SERVER)
|
||||||
|
|
||||||
with pytest.raises(expected_error):
|
with pytest.raises(expected_error):
|
||||||
m.post(ISLAND_SEND_LOG_URI, status_code=status_code)
|
m.put(ISLAND_SEND_LOG_URI, status_code=status_code)
|
||||||
island_api_client.send_log(log_contents="some_data")
|
island_api_client.send_log(agent_id=AGENT_ID, log_contents="some_data")
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
|
Loading…
Reference in New Issue