コード例 #1
0
    def test_capabilities_raises_when_on_premise_21_11(self):
        # Arrange
        sub_analysis = SubAnalysis('ab', 'asd', 'axaxax', 'root', None)
        get_global_api().on_premise_version = OnPremiseVersion.V21_11

        # Act and Assert
        with self.assertRaises(errors.UnsupportedOnPremiseVersionError):
            _ = sub_analysis.get_capabilities()
コード例 #2
0
    def test_sub_analysis_from_id_takes_parameters_from_composed_analysis_lazy_load_is_true(
            self):
        # Arrange
        analysis_id = str(uuid.uuid4())
        composed_analysis_id = str(uuid.uuid4())
        sha256 = 'axaxaxax'
        source = 'root'
        with responses.RequestsMock() as mock:
            mock.add(
                'GET',
                url=
                f'{self.full_url}/analyses/{composed_analysis_id}/sub-analyses',
                status=HTTPStatus.OK,
                json={
                    'sub_analyses': [{
                        'source': source,
                        'sub_analysis_id': analysis_id,
                        'sha256': sha256
                    }, {
                        'source': 'static_extraction',
                        'sub_analysis_id': 'ac',
                        'sha256': 'ba'
                    }]
                })

            # Act
            sub_analysis = SubAnalysis.from_analysis_id(
                analysis_id, composed_analysis_id)

            # Assert
            self.assertEqual(sub_analysis.sha256, sha256)
            self.assertEqual(sub_analysis.source, source)
            self.assertIsNone(sub_analysis.extraction_info)
コード例 #3
0
ファイル: IntezerV2.py プロジェクト: spearmin10/content
def get_analysis_code_reuse_command(intezer_api: IntezerApi,
                                    args: dict) -> CommandResults:
    analysis_id = args.get('analysis_id')
    sub_analysis_id = args.get('sub_analysis_id', 'root')

    try:
        sub_analysis: SubAnalysis = SubAnalysis(
            analysis_id=sub_analysis_id,
            composed_analysis_id=analysis_id,
            sha256='',
            source='',
            api=intezer_api)

        sub_analysis_code_reuse = sub_analysis.code_reuse
    except HTTPError as error:
        if error.response.status_code == HTTPStatus.NOT_FOUND:
            return _get_missing_analysis_result(analysis_id=str(analysis_id))
        elif error.response.status_code == HTTPStatus.CONFLICT:
            return _get_analysis_running_result(analysis_id=str(analysis_id))

    if not sub_analysis_code_reuse:
        return CommandResults(
            readable_output='No code reuse for this analysis')

    families = sub_analysis_code_reuse.pop(
        'families') if 'families' in sub_analysis_code_reuse else None

    readable_output = tableToMarkdown('Code Reuse', sub_analysis_code_reuse)

    if families:
        readable_output += '\nFamilies:\n'
        readable_output += '\n'.join(
            tableToMarkdown(family['family_name'], family)
            for family in families)

    is_root = sub_analysis_id == 'root'

    if is_root:
        context_json = {
            'Intezer.Analysis(obj.ID == val.ID)': {
                'ID': analysis_id,
                'CodeReuse': sub_analysis_code_reuse,
                'CodeReuseFamilies': families
            }
        }
    else:
        context_json = {
            'Intezer.Analysis(obj.RootAnalysis == val.ID).SubAnalyses(obj.ID == val.ID)':
            {
                'ID': sub_analysis_id,
                'RootAnalysis': analysis_id,
                'CodeReuse': sub_analysis_code_reuse,
                'CodeReuseFamilies': families
            }
        }

    return CommandResults(readable_output=readable_output,
                          outputs=context_json,
                          raw_response=sub_analysis.code_reuse)
コード例 #4
0
ファイル: IntezerV2.py プロジェクト: adambaumeister/content
def get_analysis_metadata_command(intezer_api: IntezerApi,
                                  args: dict) -> CommandResults:
    analysis_id = args.get('analysis_id')
    sub_analysis_id = args.get('sub_analysis_id', 'root')

    try:
        sub_analysis: SubAnalysis = SubAnalysis(
            analysis_id=sub_analysis_id,
            composed_analysis_id=analysis_id,
            sha256='',
            source='',
            extraction_info=None,
            api=intezer_api)

        sub_analysis_metadata = sub_analysis.metadata
    except HTTPError as error:
        if error.response.status_code == HTTPStatus.NOT_FOUND:
            return _get_missing_analysis_result(analysis_id=str(analysis_id))
        elif error.response.status_code == HTTPStatus.CONFLICT:
            return _get_analysis_running_result(analysis_id=str(analysis_id))
        raise
    metadata_table = tableToMarkdown('Analysis Metadata',
                                     sub_analysis_metadata)

    is_root = sub_analysis_id == 'root'

    if is_root:
        context_json = {
            'Intezer.Analysis(obj.ID == val.ID)': {
                'ID': analysis_id,
                'Metadata': sub_analysis_metadata
            }
        }
    else:
        context_json = {
            'Intezer.Analysis(obj.RootAnalysis == val.ID).SubAnalyses(obj.ID == val.ID)':
            {
                'ID': sub_analysis_id,
                'RootAnalysis': analysis_id,
                'Metadata': sub_analysis_metadata
            }
        }

    return CommandResults(readable_output=metadata_table,
                          outputs=context_json,
                          raw_response=sub_analysis_metadata)
コード例 #5
0
    def test_sub_analysis_raises_when_getting_sha256_and_analysis_not_found_on_compose(
            self):
        # Arrange
        analysis_id = str(uuid.uuid4())
        composed_analysis_id = str(uuid.uuid4())
        sha256 = 'axaxaxax'
        source = 'root'
        with responses.RequestsMock() as mock:
            mock.add(
                'GET',
                url=
                f'{self.full_url}/analyses/{composed_analysis_id}/sub-analyses',
                status=HTTPStatus.OK,
                json={'sub_analyses': []})

            sub_analysis = SubAnalysis.from_analysis_id(
                analysis_id, composed_analysis_id)
            # Act
            with self.assertRaises(errors.SubAnalysisNotFoundError):
                _ = sub_analysis.sha256
コード例 #6
0
    def test_sub_analysis_from_id_return_none_when_analysis_not_found_on_composed(
            self):
        # Arrange
        analysis_id = str(uuid.uuid4())
        composed_analysis_id = str(uuid.uuid4())
        with responses.RequestsMock() as mock:
            mock.add(
                'GET',
                url=
                f'{self.full_url}/analyses/{composed_analysis_id}/sub-analyses',
                status=HTTPStatus.OK,
                json={'sub_analyses': []})

            # Act
            sub_analysis = SubAnalysis.from_analysis_id(analysis_id,
                                                        composed_analysis_id,
                                                        lazy_load=False)

        # Assert
        self.assertIsNone(sub_analysis)
コード例 #7
0
    def test_sub_analysis_operations(self):
        # Arrange
        with responses.RequestsMock() as mock:
            mock.add(
                'POST',
                url=self.full_url +
                '/analyses/asd/sub-analyses/ab/code-reuse/families/ax/find-related-files',
                status=200,
                json={'result_url': 'a/b/related-files'})
            mock.add(
                'POST',
                url=self.full_url +
                '/analyses/asd/sub-analyses/ab/get-account-related-samples',
                status=200,
                json={'result_url': 'a/b/related-samples'})
            mock.add('POST',
                     url=self.full_url +
                     '/analyses/asd/sub-analyses/ab/generate-vaccine',
                     status=200,
                     json={'result_url': 'a/b/vaccine'})
            mock.add('POST',
                     url=self.full_url +
                     '/analyses/asd/sub-analyses/ab/strings',
                     status=200,
                     json={'result_url': 'a/b/strings'})
            mock.add('POST',
                     url=self.full_url +
                     '/analyses/asd/sub-analyses/ab/string-related-samples',
                     status=200,
                     json={'result_url': 'a/b/string-related-samples'})
            mock.add('POST',
                     url=self.full_url +
                     '/analyses/asd/sub-analyses/ab/capabilities',
                     status=200,
                     json={'result_url': 'a/b/capabilities'})

            mock.add('GET',
                     url=self.full_url + 'a/b/related-files',
                     status=200,
                     json={'result': {
                         'files': []
                     }})
            mock.add('GET',
                     url=self.full_url + 'a/b/related-samples',
                     status=200,
                     json={'result': {
                         'related_samples': []
                     }})
            mock.add('GET',
                     url=self.full_url + 'a/b/vaccine',
                     status=200,
                     json={'result': 'abd'})
            mock.add('GET',
                     url=self.full_url + 'a/b/strings',
                     status=200,
                     json={'result': 'abd'})
            mock.add('GET',
                     url=self.full_url + 'a/b/string-related-samples',
                     status=200,
                     json={'result': 'abd'})
            mock.add('GET',
                     url=self.full_url + 'a/b/capabilities',
                     status=200,
                     json={'result': 'abd'})

            sub_analysis = SubAnalysis('ab', 'asd', 'axaxax', 'root', None)

            # Act
            related_files_operation = sub_analysis.find_related_files(
                'ax', wait=True)
            related_samples_operation = sub_analysis.get_account_related_samples(
                wait=True)
            vaccine_operation = sub_analysis.generate_vaccine(wait=True)
            strings_operation = sub_analysis.get_strings(wait=True)
            string_related_operation = sub_analysis.get_string_related_samples(
                'test', wait=True)
            capabilities = sub_analysis.get_capabilities(wait=True)

        # Assert
        self.assertIsNotNone(related_files_operation.get_result())
        self.assertIsNotNone(related_samples_operation.get_result())
        self.assertIsNotNone(vaccine_operation.get_result())
        self.assertIsNotNone(strings_operation.get_result())
        self.assertIsNotNone(string_related_operation.get_result())
        self.assertIsNotNone(capabilities.get_result())