The OSQuery provider
OSQuery driver documentation
The OSQuery
data provider can read OSQuery log files
and provide convenient query functions for each OSQuery “table”
(or event type) contained in the logs.
The provider can read in one or more log files, or multiple log files in multiple folders. The files are read, converted to pandas DataFrames and grouped by table/event. In addition, date fields within the data are converted to pandas Timestamp format.
The query provider query functions will ignore parameters and do no further filtering. You can use pandas to do additional filtering and sorting of the data, or use it directly with other MSTICPy functionality.
OSQuery Configuration
You can store your connection details in msticpyconfig.yaml,
instead of supplying the data_paths
parameter to
the QueryProvider
class.
For more information on using and configuring msticpyconfig.yaml see msticpy Package Configuration and MSTICPy Settings Editor
The OSQuery settings in the file should look like the following:
DataProviders:
...
OSQuery:
data_paths:
- /home/user1/sample_data
- /home/shared/sample_data
cache_file: ~/.msticpy/os_query_cache.pkl
The cache_file entry is explained later.
Expected log file format
The log file format must be a text file of JSON records. An example is shown below
{"name":"pack_osquery-snapshots-pack_python_packages","hostIdentifier":"jumpvm","calendarTime":"Thu Mar 16 09:22:33 2023 UTC","unixTime":1678958553,"epoch":0,"counter":0,"numerics":false,"decorations":{"host_uuid":"40443dd9-5b21-a345-8f89-aadde84c3719","username":"LOGIN"},"columns":{"author":"Python Packaging Authority","directory":"/usr/lib/python3.9/site-packages/","license":"UNKNOWN","name":"setuptools","path":"/usr/lib/python3.9/site-packages/setuptools-50.3.2.dist-info/","summary":"Easily download, build, install, upgrade, and uninstall Python packages","version":"50.3.2"},"action":"snapshot"}
{"name":"pack_osquery-snapshots-pack_dns_resolvers","hostIdentifier":"jumpvm","calendarTime":"Thu Mar 16 13:14:10 2023 UTC","unixTime":1678972450,"epoch":0,"counter":0,"numerics":false,"decorations":{"host_uuid":"40443dd9-5b21-a345-8f89-aadde84c3719","username":"LOGIN"},"columns":{"address":"168.63.129.16","id":"0","netmask":"32","options":"705","type":"nameserver"},"action":"snapshot"}
Each JSON record is expected to have a name
field, identifying
the event type, along with child dictionaries (columns
and decorations
.
Using the OSQuery provider
To use the OSQuery provider you need to create an QueryProvider
instance, passing the string “OSQueryLogs” as the data_environment
parameter. If you have not configured data_paths
in msticpyconfig.yaml,
you also need to add the data_paths
parameter to specify
specific folders or files that you want to read.
Calling the connect
method triggers the provider to read the
log files.
100%|██████████| 2/2 [00:00<00:00, 25.01it/s]
Data loaded.
Listing OSQuery tables
qry_prov.list_queries()
['osquery.acpi_tables',
'osquery.device_nodes',
'osquery.dns_resolvers',
'osquery.events',
'osquery.fim',
'osquery.last',
'osquery.listening_ports',
'osquery.logged_in_users',
'osquery.mounts',
'osquery.open_sockets',
'osquery.osquery_info',
'osquery.osquery_packs',
'osquery.osquerydb_size',
'osquery.platform_info',
'osquery.process_memory',
'osquery.processes',
'osquery.python_packages',
'osquery.schedule',
'osquery.shell_history']
Running an OSQuery query
Each query returns the table of event types retrieved from the logs.
qry_prov.osquery.processes()
name |
hostIdentifier |
unixTime |
… |
username |
cmdline |
euid |
tname_ |
parent |
uid |
username |
---|---|---|---|---|---|---|---|---|---|---|
pack_osquery-custom-pack_processes |
jumpvm |
2023-03-16 03:08:58+00:00 |
… |
LOGIN |
0 |
kthreadd |
2 |
0 |
root |
|
pack_osquery-custom-pack_processes |
jumpvm |
2023-03-16 03:08:58+00:00 |
… |
LOGIN |
0 |
kthreadd |
2 |
0 |
root |
|
pack_osquery-custom-pack_processes |
jumpvm |
2023-03-16 03:08:58+00:00 |
… |
LOGIN |
0 |
kthreadd |
2 |
0 |
root |
|
pack_osquery-custom-pack_processes |
jumpvm |
2023-03-16 03:08:58+00:00 |
… |
LOGIN |
0 |
kthreadd |
2 |
0 |
root |
|
pack_osquery-custom-pack_processes |
jumpvm |
2023-03-16 03:08:58+00:00 |
… |
LOGIN |
0 |
kthreadd |
2 |
0 |
root |
Note
Columns in the the nested log data may be renamed
if their name clashes with an existing name. See the
example name_
in the previous table.
Other OSQuery Provider Documentation
Built-in Queries for Local Data.
LocalData driver API documentation