Esempio n. 1
0
    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)
Esempio n. 2
0
 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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
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=[])))
Esempio n. 6
0
 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'))
             )
Esempio n. 7
0
 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']))
Esempio n. 8
0
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')))
Esempio n. 9
0
    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)
Esempio n. 10
0
 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', ())))
Esempio n. 11
0
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')
    ))
Esempio n. 12
0
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
Esempio n. 13
0
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
Esempio n. 14
0
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