Beispiel #1
0
    def testSupportedOS(self):
        """Test supported_os inside the collector object."""
        # Run with false condition.
        client_mock = action_mocks.ActionMock("ListProcesses")
        coll1 = rdfvalue.ArtifactSource(
            type=rdfvalue.ArtifactSource.SourceType.GRR_CLIENT_ACTION,
            attributes={"client_action": "ListProcesses"},
            supported_os=["Windows"])
        self.fakeartifact.sources.append(coll1)
        fd = self._RunClientActionArtifact(client_mock, ["FakeArtifact"])
        self.assertEqual(fd.__class__.__name__, "AFF4Volume")

        # Now run with matching or condition.
        coll1.conditions = []
        coll1.supported_os = ["Linux", "Windows"]
        self.fakeartifact.sources = []
        self.fakeartifact.sources.append(coll1)
        fd = self._RunClientActionArtifact(client_mock, ["FakeArtifact"])
        self.assertEqual(fd.__class__.__name__, "RDFValueCollection")

        # Now run with impossible or condition.
        coll1.conditions = ["os == 'Linux' or os == 'Windows'"]
        coll1.supported_os = ["NotTrue"]
        self.fakeartifact.sources = []
        self.fakeartifact.sources.append(coll1)
        fd = self._RunClientActionArtifact(client_mock, ["FakeArtifact"])
        self.assertEqual(fd.__class__.__name__, "AFF4Volume")
Beispiel #2
0
    def testConditions(self):
        """Test we can get a GRR client artifact with conditions."""
        # Run with false condition.
        client_mock = action_mocks.ActionMock("ListProcesses")
        coll1 = rdfvalue.ArtifactSource(
            type=rdfvalue.ArtifactSource.SourceType.GRR_CLIENT_ACTION,
            attributes={"client_action": "ListProcesses"},
            conditions=["os == 'Windows'"])
        self.fakeartifact.sources.append(coll1)
        fd = self._RunClientActionArtifact(client_mock, ["FakeArtifact"])
        self.assertEqual(fd.__class__.__name__, "AFF4Volume")

        # Now run with matching or condition.
        coll1.conditions = ["os == 'Linux' or os == 'Windows'"]
        self.fakeartifact.sources = []
        self.fakeartifact.sources.append(coll1)
        fd = self._RunClientActionArtifact(client_mock, ["FakeArtifact"])
        self.assertEqual(fd.__class__.__name__, "RDFValueCollection")

        # Now run with impossible or condition.
        coll1.conditions.append("os == 'NotTrue'")
        self.fakeartifact.sources = []
        self.fakeartifact.sources.append(coll1)
        fd = self._RunClientActionArtifact(client_mock, ["FakeArtifact"])
        self.assertEqual(fd.__class__.__name__, "AFF4Volume")
Beispiel #3
0
    def testRunGrrClientActionArtifactSplit(self):
        """Test that artifacts get split into separate collections."""
        client_mock = action_mocks.ActionMock("ListProcesses", "StatFile")
        client = aff4.FACTORY.Open(self.client_id, token=self.token, mode="rw")
        client.Set(client.Schema.SYSTEM("Linux"))
        client.Flush()

        coll1 = rdfvalue.ArtifactSource(
            type=rdfvalue.ArtifactSource.SourceType.GRR_CLIENT_ACTION,
            attributes={"client_action": r"ListProcesses"})
        self.fakeartifact.sources.append(coll1)
        self.fakeartifact2.sources.append(coll1)
        artifact_list = ["FakeArtifact", "FakeArtifact2"]
        for _ in test_lib.TestFlowHelper("ArtifactCollectorFlow",
                                         client_mock,
                                         artifact_list=artifact_list,
                                         token=self.token,
                                         client_id=self.client_id,
                                         output="test_artifact",
                                         split_output_by_artifact=True):
            pass

        # Check that we got two separate collections based on artifact name
        fd = aff4.FACTORY.Open(rdfvalue.RDFURN(
            self.client_id).Add("test_artifact_FakeArtifact"),
                               token=self.token)
        self.assertTrue(isinstance(list(fd)[0], rdfvalue.Process))
        self.assertTrue(len(fd) > 5)

        fd = aff4.FACTORY.Open(rdfvalue.RDFURN(
            self.client_id).Add("test_artifact_FakeArtifact2"),
                               token=self.token)
        self.assertTrue(len(fd) > 5)
        self.assertTrue(isinstance(list(fd)[0], rdfvalue.Process))
Beispiel #4
0
    def testRunGrrClientActionArtifact(self):
        """Test we can get a GRR client artifact."""
        client_mock = action_mocks.ActionMock("ListProcesses")
        client = aff4.FACTORY.Open(self.client_id, token=self.token, mode="rw")
        client.Set(client.Schema.SYSTEM("Linux"))
        client.Flush()

        coll1 = rdfvalue.ArtifactSource(
            type=rdfvalue.ArtifactSource.SourceType.GRR_CLIENT_ACTION,
            attributes={"client_action": r"ListProcesses"})
        self.fakeartifact.sources.append(coll1)
        artifact_list = ["FakeArtifact"]
        for _ in test_lib.TestFlowHelper("ArtifactCollectorFlow",
                                         client_mock,
                                         artifact_list=artifact_list,
                                         token=self.token,
                                         client_id=self.client_id,
                                         output="test_artifact"):
            pass

        # Test the AFF4 file that was created.
        fd = aff4.FACTORY.Open(rdfvalue.RDFURN(
            self.client_id).Add("test_artifact"),
                               token=self.token)
        self.assertTrue(isinstance(list(fd)[0], rdfvalue.Process))
        self.assertTrue(len(fd) > 5)
Beispiel #5
0
    def testGetArtifact1(self):
        """Test we can get a basic artifact."""

        client_mock = action_mocks.ActionMock("TransferBuffer", "StatFile",
                                              "Find", "FingerprintFile",
                                              "HashBuffer")
        client = aff4.FACTORY.Open(self.client_id, token=self.token, mode="rw")
        client.Set(client.Schema.SYSTEM("Linux"))
        client.Flush()

        # Dynamically add a ArtifactSource specifying the base path.
        file_path = os.path.join(self.base_path, "test_img.dd")
        coll1 = rdfvalue.ArtifactSource(
            type=rdfvalue.ArtifactSource.SourceType.FILE,
            attributes={"paths": [file_path]})
        self.fakeartifact.sources.append(coll1)

        artifact_list = ["FakeArtifact"]
        for _ in test_lib.TestFlowHelper("ArtifactCollectorFlow",
                                         client_mock,
                                         artifact_list=artifact_list,
                                         use_tsk=False,
                                         token=self.token,
                                         client_id=self.client_id):
            pass

        # Test the AFF4 file that was created.
        fd1 = aff4.FACTORY.Open("%s/fs/os/%s" % (self.client_id, file_path),
                                token=self.token)
        fd2 = open(file_path)
        fd2.seek(0, 2)

        self.assertEqual(fd2.tell(), int(fd1.Get(fd1.Schema.SIZE)))
Beispiel #6
0
    def testGrep(self):
        class MockCallFlow(object):
            def CallFlow(self, *args, **kwargs):
                self.args = args
                self.kwargs = kwargs

        mock_call_flow = MockCallFlow()
        with utils.Stubber(collectors.ArtifactCollectorFlow, "CallFlow",
                           mock_call_flow.CallFlow):

            collect_flow = collectors.ArtifactCollectorFlow(None,
                                                            token=self.token)
            collect_flow.state.Register("knowledge_base",
                                        rdfvalue.KnowledgeBase())
            collect_flow.current_artifact_name = "blah"
            collect_flow.state.knowledge_base.MergeOrAddUser(
                rdfvalue.KnowledgeBaseUser(username="******"))
            collect_flow.state.knowledge_base.MergeOrAddUser(
                rdfvalue.KnowledgeBaseUser(username="******"))

            collector = rdfvalue.ArtifactSource(
                type=rdfvalue.ArtifactSource.SourceType.GREP,
                attributes={
                    "paths": ["/etc/passwd"],
                    "content_regex_list": [r"^a%%users.username%%b$"]
                })
            collect_flow.Grep(collector, rdfvalue.PathSpec.PathType.TSK)

        conditions = mock_call_flow.kwargs["conditions"]
        self.assertEqual(len(conditions), 1)
        regexes = conditions[0].contents_regex_match.regex.SerializeToString()
        self.assertItemsEqual(regexes.split("|"),
                              ["(^atest1b$)", "(^atest2b$)"])
        self.assertEqual(mock_call_flow.kwargs["paths"], ["/etc/passwd"])