def test_planner(self): self.run_async(self.data_svc.store(Planner(name='test', planner_id='some_id', module='some.path.here', params=None, description='description'))) self.run_async(self.data_svc.store(Planner(name='test', planner_id='some_id', module='some.path.here', params=None, description='description'))) planners = self.run_async(self.data_svc.locate('planners')) self.assertEqual(1, len(planners)) for x in planners: json.dumps(x.display)
def test_planner(self): self.run_async( self.data_svc.store( Planner(name='test', module='some.path.here', params=None))) self.run_async( self.data_svc.store( Planner(name='test', module='some.path.here', params=None))) self.assertEqual(1, len(self.data_svc.ram['planners'])) for x in self.data_svc.ram['planners']: json.dumps(x.display)
async def _load_planners(self, plugin): for filename in glob.iglob('%s/planners/*.yml' % plugin.data_dir, recursive=False): for planner in self.strip_yml(filename): planner = Planner(planner_id=planner.get('id'), name=planner.get('name'), module=planner.get('module'), params=str(planner.get('params')), description=planner.get('description'), stopping_conditions=planner.get('stopping_conditions'), ignore_enforcement_modules=planner.get('ignore_enforcement_modules', ())) planner.access = plugin.access await self.store(planner)
async def _load_planners(self, plugin): for filename in glob.iglob('%s/planners/*.yml' % plugin.data_dir, recursive=False): for planner in self.strip_yml(filename): planner = Planner.load(planner) planner.access = plugin.access await self.store(planner)
def setup_rest_svc_test(loop, data_svc): BaseWorld.apply_config(name='default', config={ 'app.contact.http': '0.0.0.0', 'plugins': ['sandcat', 'stockpile'], 'crypt_salt': 'BLAH', 'api_key': 'ADMIN123', 'encryption_key': 'ADMIN123', 'exfil_dir': '/tmp' }) loop.run_until_complete( data_svc.store( Ability(ability_id='123', test=BaseWorld.encode_string('curl #{app.contact.http}'), variations=[]))) loop.run_until_complete( data_svc.store( Adversary(adversary_id='123', name='test', description='test', phases=[]))) loop.run_until_complete( data_svc.store(Agent(paw='123', sleep_min=2, sleep_max=8, watchdog=0))) loop.run_until_complete( data_svc.store( Planner(planner_id='123', name='test', module='test', params=dict()))) loop.run_until_complete( data_svc.store(Source(identifier='123', name='test', facts=[])))
async def _load_planners(self, directory): for filename in glob.iglob('%s/*.yml' % directory, recursive=False): for planner in self.strip_yml(filename): await self.store( Planner(name=planner.get('name'), module=planner.get('module'), params=json.dumps(planner.get('params')), description=planner.get('description')) )
async def _load_planners(self, directory): for filename in glob.iglob('%s/*.yml' % directory, recursive=False): for planner in self.strip_yml(filename): await self.store( Planner(name=planner.get('name'), module=planner.get('module'), params=json.dumps(planner.get('params')))) self.log.debug('Loaded %s planners' % len(self.ram['planners']))
def setup_rest_svc_test(loop, data_svc): BaseWorld.apply_config(name='main', config={ 'app.contact.http': '0.0.0.0', 'plugins': ['sandcat', 'stockpile'], 'crypt_salt': 'BLAH', 'api_key': 'ADMIN123', 'encryption_key': 'ADMIN123', 'exfil_dir': '/tmp' }) loop.run_until_complete( data_svc.store( Ability(ability_id='123', test=BaseWorld.encode_string('curl #{app.contact.http}'), variations=[], executor='psh', platform='windows'))) adversary = Adversary(adversary_id='123', name='test', description='test', atomic_ordering=[]) loop.run_until_complete(data_svc.store(adversary)) agent = Agent(paw='123', sleep_min=2, sleep_max=8, watchdog=0, executors=['pwsh', 'psh'], platform='windows') loop.run_until_complete(data_svc.store(agent)) loop.run_until_complete( data_svc.store( Planner(planner_id='123', name='test', module='test', params=dict()))) source = Source(id='123', name='test', facts=[], adjustments=[]) loop.run_until_complete(data_svc.store(source)) loop.run_until_complete( data_svc.store( Operation(name='test', agents=[agent], adversary=adversary, id='123', source=source))) loop.run_until_complete( data_svc.store( Obfuscator( name='plain-text', description= 'Does no obfuscation to any command, instead running it in plain text', module='plugins.stockpile.app.obfuscators.plain_text')))
def test_no_duplicate_planner(self, loop, data_svc): loop.run_until_complete( data_svc.store( Planner(name='test', planner_id='some_id', module='some.path.here', params=None, description='description'))) loop.run_until_complete( data_svc.store( Planner(name='test', planner_id='some_id', module='some.path.here', params=None, description='description'))) planners = loop.run_until_complete(data_svc.locate('planners')) assert len(planners) == 1 for x in planners: json.dumps(x.display)
async def _load_planners(self, directory): for filename in glob.iglob('%s/*.yml' % directory, recursive=False): for planner in self.strip_yml(filename): await self.store( Planner( planner_id=planner.get('id'), name=planner.get('name'), module=planner.get('module'), params=str(planner.get('params')), description=planner.get('description'), stopping_conditions=planner.get('stopping_conditions'), ignore_enforcement_modules=planner.get( 'ignore_enforcement_modules', ())))
def setup_rest_svc_test(loop, data_svc): BaseWorld.apply_config(name='main', config={'app.contact.http': '0.0.0.0', 'plugins': ['sandcat', 'stockpile'], 'crypt_salt': 'BLAH', 'api_key': 'ADMIN123', 'encryption_key': 'ADMIN123', 'exfil_dir': '/tmp'}) loop.run_until_complete(data_svc.store( Ability(ability_id='123', name='testA', executors=[ Executor(name='psh', platform='windows', command='curl #{app.contact.http}') ]) )) loop.run_until_complete(data_svc.store( Ability(ability_id='456', name='testB', executors=[ Executor(name='sh', platform='linux', command='whoami') ]) )) loop.run_until_complete(data_svc.store( Ability(ability_id='789', name='testC', executors=[ Executor(name='sh', platform='linux', command='hostname') ]) )) adversary = Adversary(adversary_id='123', name='test', description='test', atomic_ordering=[]) loop.run_until_complete(data_svc.store(adversary)) agent = Agent(paw='123', sleep_min=2, sleep_max=8, watchdog=0, executors=['pwsh', 'psh'], platform='windows') loop.run_until_complete(data_svc.store(agent)) loop.run_until_complete(data_svc.store( Objective(id='495a9828-cab1-44dd-a0ca-66e58177d8cc', name='default', goals=[Goal()]) )) loop.run_until_complete(data_svc.store( Planner(planner_id='123', name='test', module='test', params=dict()) )) source = Source(id='123', name='test', facts=[], adjustments=[]) loop.run_until_complete(data_svc.store(source)) loop.run_until_complete(data_svc.store( Operation(name='test', agents=[agent], adversary=adversary, id='123', source=source) )) loop.run_until_complete(data_svc.store( Obfuscator(name='plain-text', description='Does no obfuscation to any command, instead running it in plain text', module='plugins.stockpile.app.obfuscators.plain_text') ))
def op_with_learning_and_seeded(ability, adversary, operation_agent, parse_datestring): sc = Source(id='3124', name='test', facts=[Fact(trait='domain.user.name', value='bob')]) op = Operation(id='6789', name='testC', agents=[], adversary=adversary, source=sc, use_learning_parsers=True) # patch operation to make it 'realistic' op.start = parse_datestring(OP_START_TIME) op.adversary = op.adversary() op.planner = Planner(planner_id='12345', name='test_planner', module='not.an.actual.planner', params=None) op.objective = Objective(id='6428', name='not_an_objective') t_operation_agent = operation_agent t_operation_agent.paw = '123456' op.agents = [t_operation_agent] return op
def test_planner(event_loop, api_v2_client): planner = Planner(name="123test planner", planner_id="123", description="a test planner", plugin="planner") event_loop.run_until_complete(BaseService.get_service('data_svc').store(planner)) return planner
def test_planner_2(event_loop, api_v2_client): planner = Planner(name="atomic", planner_id="456", description="an alphabetically superior test planner (fake)", plugin="planner") event_loop.run_until_complete(BaseService.get_service('data_svc').store(planner)) return planner