Skip to content

Commit

Permalink
Syncing recent changes. (#1035)
Browse files Browse the repository at this point in the history
* Including devenv helper scripts for easy Podman-based development environment setup.
* Removed legacy communications code. Fleetspeak is now the only communication layer supoorted.
* Renamed AdminUI.new_hunt_wizard.default_output_plugin to AdminUI.new_hunt_wizard.default_output_plugins (note the "s" in the end).
* Extended CallState to pass a custom list of responses to the callback. Improved the logic of using CallState with a timestamp in the future.
* Further UIv2 work, new flows for statting and hashing files added.
  • Loading branch information
mbushkov authored Jul 25, 2023
1 parent 033009a commit 4787f1a
Show file tree
Hide file tree
Showing 469 changed files with 18,909 additions and 13,420 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,5 @@ grr/server/grr_response_server/gui/static/fonts/
installers/
GRRlog.txt
*.log
grr/server/grr_response_server/gui/static/third-party
grr/server/grr_response_server/gui/ui/.angular
8 changes: 8 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@

## Upcoming release

* Renamed AdminUI.new_hunt_wizard.default_output_plugin to
AdminUI.new_hunt_wizard.default_output_plugins (note the "s" in the end).
The new option accepts a comma-separated list of names.
* Fully removed deprecated use_tsk flag.
* Removed deprecated plugin_args field from OutputPluginDescriptor.

## 3.4.6.7

* Introduced Server.grr_binaries_readonly configuration option (set to False
by default). When set to True, binaries and python hacks can't be overriden
or deleted.
Expand Down
104 changes: 34 additions & 70 deletions colab/grr_colab/client_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ class ClientTest(testing.ColabE2ETest):
NONEXISTENT_CLIENT_ID = 'C.5555555555555555'

def testWithId_ClientExists(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
self.assertIsNotNone(client)
Expand All @@ -47,8 +46,7 @@ def testWithId_NoSuchClient(self):

def testWithHostname_SingleClient(self):
hostname = 'user.loc.group.example.com'
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = rdf_objects.ClientSnapshot(client_id=ClientTest.FAKE_CLIENT_ID)
client.knowledge_base.fqdn = hostname
Expand All @@ -64,10 +62,8 @@ def testWithHostname_MultipleClients(self):
client_id1 = 'C.1111111111111111'
client_id2 = 'C.1111111111111112'

data_store.REL_DB.WriteClientMetadata(
client_id=client_id1, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(
client_id=client_id2, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=client_id1)
data_store.REL_DB.WriteClientMetadata(client_id=client_id2)

client = rdf_objects.ClientSnapshot(client_id=client_id1)
client.knowledge_base.fqdn = hostname
Expand Down Expand Up @@ -98,10 +94,8 @@ def testSearch_SingleKeyword(self):
client_id1 = 'C.1111111111111111'
client_id2 = 'C.1111111111111112'

data_store.REL_DB.WriteClientMetadata(
client_id=client_id1, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(
client_id=client_id2, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=client_id1)
data_store.REL_DB.WriteClientMetadata(client_id=client_id2)

client = rdf_objects.ClientSnapshot(client_id=client_id1)
client.startup_info.client_info.labels.append('foo')
Expand All @@ -121,10 +115,8 @@ def testSearch_NoResults(self):
client_id1 = 'C.1111111111111111'
client_id2 = 'C.1111111111111112'

data_store.REL_DB.WriteClientMetadata(
client_id=client_id1, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(
client_id=client_id2, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=client_id1)
data_store.REL_DB.WriteClientMetadata(client_id=client_id2)

client = rdf_objects.ClientSnapshot(client_id=client_id1)
client.startup_info.client_info.labels.append('foo')
Expand All @@ -143,10 +135,8 @@ def testSearch_MultipleResults(self):
client_id1 = 'C.1111111111111111'
client_id2 = 'C.1111111111111112'

data_store.REL_DB.WriteClientMetadata(
client_id=client_id1, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(
client_id=client_id2, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=client_id1)
data_store.REL_DB.WriteClientMetadata(client_id=client_id2)

client = rdf_objects.ClientSnapshot(client_id=client_id1)
client.startup_info.client_info.labels.append('foo')
Expand All @@ -168,10 +158,8 @@ def testSearch_MultipleKeywords(self):
client_id1 = 'C.1111111111111111'
client_id2 = 'C.1111111111111112'

data_store.REL_DB.WriteClientMetadata(
client_id=client_id1, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(
client_id=client_id2, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=client_id1)
data_store.REL_DB.WriteClientMetadata(client_id=client_id2)

client = rdf_objects.ClientSnapshot(client_id=client_id1)
client.knowledge_base.fqdn = hostname
Expand All @@ -190,16 +178,14 @@ def testSearch_MultipleKeywords(self):
self.assertEqual(clients[0].id, client_id1)

def testId(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
self.assertEqual(ClientTest.FAKE_CLIENT_ID, client.id)

def testHostname(self):
hostname = 'hostname.loc.group.example.com'
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = rdf_objects.ClientSnapshot(client_id=ClientTest.FAKE_CLIENT_ID)
client.knowledge_base.fqdn = hostname
Expand All @@ -210,17 +196,15 @@ def testHostname(self):

@parser_test_lib.WithAllParsers
def testHostname_AfterInterrogate(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
client.interrogate()
self.assertEqual(client.hostname, socket.getfqdn())

def testIfaces(self):
ifname = 'test_ifname'
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = rdf_objects.ClientSnapshot(client_id=ClientTest.FAKE_CLIENT_ID)
client.interfaces = [rdf_client_network.Interface(ifname=ifname)]
Expand All @@ -232,8 +216,7 @@ def testIfaces(self):

@parser_test_lib.WithAllParsers
def testIfaces_AfterInterrogate(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
client.interrogate()
Expand All @@ -248,8 +231,7 @@ def testKnowledgebase(self):
data_store.REL_DB.WriteGRRUser(users[0])
data_store.REL_DB.WriteGRRUser(users[1])

data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = rdf_objects.ClientSnapshot(client_id=ClientTest.FAKE_CLIENT_ID)
client.knowledge_base.fqdn = fqdn
Expand All @@ -269,8 +251,7 @@ def testKnowledgebase(self):

def testArch(self):
arch = 'x42'
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = rdf_objects.ClientSnapshot(client_id=ClientTest.FAKE_CLIENT_ID)
client.arch = arch
Expand All @@ -281,17 +262,15 @@ def testArch(self):

@parser_test_lib.WithAllParsers
def testArch_AfterInterrogate(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
client.interrogate()
self.assertEqual(client.arch, platform.machine())

def testKernel(self):
kernel = '0.0.0'
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = rdf_objects.ClientSnapshot(client_id=ClientTest.FAKE_CLIENT_ID)
client.kernel = kernel
Expand All @@ -302,8 +281,7 @@ def testKernel(self):

@parser_test_lib.WithAllParsers
def testKernel_AfterInterrogate(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
client.interrogate()
Expand All @@ -314,8 +292,7 @@ def testLabels(self):
owner = 'test-user'

data_store.REL_DB.WriteGRRUser('test-user')
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)
data_store.REL_DB.AddClientLabels(ClientTest.FAKE_CLIENT_ID, owner, labels)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
Expand All @@ -325,7 +302,6 @@ def testFirstSeen(self):
first_seen = rdfvalue.RDFDatetime.Now()
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID,
fleetspeak_enabled=False,
first_seen=first_seen)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
Expand All @@ -335,15 +311,13 @@ def testLastSeen(self):
last_seen = rdfvalue.RDFDatetime.Now()
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID,
fleetspeak_enabled=False,
last_ping=last_seen)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
self.assertEqual(client.last_seen, last_seen.AsDatetime())

def testRequestApproval(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)
data_store.REL_DB.WriteGRRUser('foo')

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
Expand All @@ -359,8 +333,7 @@ def testRequestApproval(self):
self.assertEqual(approvals[0].reason, 'test')

def testRequestApprovalAndWait(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)
data_store.REL_DB.WriteGRRUser('foo')

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)
Expand Down Expand Up @@ -397,17 +370,15 @@ def ProcessApproval():

@parser_test_lib.WithAllParsers
def testInterrogate(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)
client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)

summary = client.interrogate()
self.assertEqual(summary.system_info.fqdn, socket.getfqdn())

@testing.with_approval_checks
def testInterrogate_WithoutApproval(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)

Expand All @@ -417,17 +388,15 @@ def testInterrogate_WithoutApproval(self):
self.assertEqual(context.exception.client_id, ClientTest.FAKE_CLIENT_ID)

def testPs(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)
client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)

ps = client.ps()
self.assertNotEmpty(ps)

@testing.with_approval_checks
def testPs_WithoutApproval(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)

Expand All @@ -437,8 +406,7 @@ def testPs_WithoutApproval(self):
self.assertEqual(context.exception.client_id, ClientTest.FAKE_CLIENT_ID)

def testOsquery(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)

Expand All @@ -459,8 +427,7 @@ def testOsquery(self):

@testing.with_approval_checks
def testOsquery_WithoutApproval(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)

Expand All @@ -471,8 +438,7 @@ def testOsquery_WithoutApproval(self):

@parser_test_lib.WithAllParsers
def testCollect(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = rdf_objects.ClientSnapshot(client_id=ClientTest.FAKE_CLIENT_ID)
client.knowledge_base.os = 'test-os'
Expand All @@ -498,8 +464,7 @@ def testCollect(self):

@testing.with_approval_checks
def testCollect_WithoutApproval(self):
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)

Expand All @@ -510,8 +475,7 @@ def testCollect_WithoutApproval(self):

def testYara(self):
search_str = 'foobarbaz-test-with-unique-string-in-memory'
data_store.REL_DB.WriteClientMetadata(
client_id=ClientTest.FAKE_CLIENT_ID, fleetspeak_enabled=False)
data_store.REL_DB.WriteClientMetadata(client_id=ClientTest.FAKE_CLIENT_ID)

client = grr_colab.Client.with_id(ClientTest.FAKE_CLIENT_ID)

Expand Down
Loading

0 comments on commit 4787f1a

Please sign in to comment.