async def handle_heartbeat(self, paw, platform, server, group, host, username, executors, architecture, location, pid, ppid, sleep, privilege, c2): """ Accept all components of an agent profile and save a new agent or register an updated heartbeat. :param paw: :param platform: :param server: :param group: :param host: :param username: :param executors: :param architecture: :param location: :param pid: :param ppid: :param sleep: :param privilege: :return: the agent object from explode """ self.log.debug('HEARTBEAT (%s) (%s)' % (c2, paw)) agent = Agent(paw=paw, host=host, username=username, platform=platform, server=server, location=location, executors=executors, architecture=architecture, pid=pid, ppid=ppid, privilege=privilege, c2=c2) if await self.data_svc.locate('agents', dict(paw=paw)): return await self.data_svc.store(agent) agent.sleep_min = agent.sleep_max = sleep agent.group = group agent.trusted = True return await self.data_svc.store(agent)
async def handle_heartbeat(self, paw, platform, server, group, host, username, executors, architecture, location, pid, ppid, sleep, privilege, c2, exe_name): """ Accept all components of an agent profile and save a new agent or register an updated heartbeat. :param paw: :param platform: :param server: :param group: :param host: :param username: :param executors: :param architecture: :param location: :param pid: :param ppid: :param sleep: :param privilege: :return: the agent object from explode """ agent = Agent(paw=paw, host=host, username=username, platform=platform, server=server, location=location, executors=executors, architecture=architecture, pid=pid, ppid=ppid, privilege=privilege, c2=c2, exe_name=exe_name) if await self.get_service('data_svc').locate('agents', dict(paw=paw)): new_agent = await self.get_service('data_svc').store(agent) await self._add_agent_to_operation(new_agent) return new_agent agent.sleep_min = agent.sleep_max = sleep agent.group = group agent.trusted = True new_agent = await self.get_service('data_svc').store(agent) await self._add_agent_to_operation(new_agent) return new_agent
def test_store_existing_agent(self, data_svc): agent = Agent(paw='123', sleep_min=2, group='red', sleep_max=8, watchdog=0, executors=['cmd', 'test'], platform='windows', trusted=True, pending_contact='HTML') agent.store(data_svc.ram) assert len(data_svc.ram['agents']) == 1 agent.group = "blue" agent.trusted = False agent.sleep_min = 1 agent.sleep_max = 5 agent.watchdog = 1 agent.pending_contact = "HTTP" stored_agent = agent.store(data_svc.ram) assert len(data_svc.ram['agents']) == 1 assert stored_agent.schema.dump(stored_agent) == agent.schema.dump(agent)