firepit package
Subpackages
Submodules
firepit.deref module
- firepit.deref.auto_deref(store, view, ignore=None, paths=None)[source]
Automatically resolve refs for backward compatibility.
If paths is specified, only follow/deref those specific paths/properties.
Use auto_deref_cached if you already have col_dict in memory.
firepit.exceptions module
firepit.generator module
firepit.pgcommon module
Some common PostgreSQL stuff used by both pgstorage.py (the normal interface) and aio.asyncpgstorage.py (the async interface).
firepit.pgstorage module
firepit.props module
Utility functions for STIX properties
- firepit.props.auto_agg(sco_type, prop, col_type)[source]
Infer an aggregation function based on column name and type
firepit.query module
Utilities for generating SQL while avoiding SQL injection vulns
- class firepit.query.BinnedColumn(prop: str, n: int, unit: Optional[str] = None, table: Optional[str] = None, alias: Optional[str] = None)[source]
Bases:
Column
Bin (or “bucket”) column values, persumably for easier grouping
- class firepit.query.CoalescedColumn(names, alias)[source]
Bases:
object
First non-null column from a list - used after a JOIN
- class firepit.query.CountUnique(cols=None)[source]
Bases:
object
Unique count of the rows in a result set
- class firepit.query.Filter(preds, op=' AND ')[source]
Bases:
object
Alternative SQL WHERE clause
- AND = ' AND '
- OR = ' OR '
- class firepit.query.Join(name, left_col=None, op=None, right_col=None, preds=None, how='INNER', alias=None, lhs=None)[source]
Bases:
object
Join 2 tables
- class firepit.query.Order(cols)[source]
Bases:
object
SQL ORDER BY clause
- ASC = 'ASC'
- DESC = 'DESC'
- class firepit.query.Projection(cols)[source]
Bases:
object
SQL SELECT (really projection - pick column subset) clause
- class firepit.query.Query(arg=None)[source]
Bases:
object
SQL Query statement
SQL order of evaluations: FROM, including JOINs WHERE GROUP BY HAVING WINDOW functions SELECT (projection) DISTINCT UNION ORDER BY LIMIT and OFFSET
firepit.schemas module
firepit.sqlitestorage module
- class firepit.sqlitestorage.SQLiteStorage(dbname)[source]
Bases:
SqlStorage
firepit.sqlstorage module
- class firepit.sqlstorage.SqlStorage[source]
Bases:
object
- assign(viewname, on, op=None, by=None, ascending=True, limit=None)[source]
DEPRECATED: Perform (unary) operation op on on and store result as viewname
- cache(query_id, bundles, batchsize=2000, **kwargs)[source]
Cache the result of a query/dataset
Takes the observed-data SDOs from bundles and “flattens” them, splits out SCOs by type, and inserts into a database with 1 table per type.
Accepts some keyword args for runtime options, some of which may depend on what database type is in use (e.g. sqlite3, postgresql, …)
Args:
query_id (str): a unique identifier for this set of bundles
bundles (list): STIX bundles (either in-memory Python objects or filename paths)
batchsize (int): number of objects to insert in 1 batch (defaults to 2000)
- extract(viewname, sco_type, query_id, pattern)[source]
Extract all sco_type object from the results of query_id and store as viewname
- extract_observeddata_attribute(viewname, name_of_attribute, path=None, value=None, limit=None, run=True)[source]
Get the observations of value in viewname.`path` Returns list of dicts like {‘name_of_attribute’: ‘…’, ‘{column}’: ‘…’} name_of_attribute can be a str or list of str (to get multiple attrs)
- filter(viewname, sco_type, input_view, pattern)[source]
Extract all sco_type object from input_view and store as viewname
- group(newname, viewname, by, aggs=None)[source]
Create new view newname defined by grouping viewname by by
- join(viewname, l_var, l_on, r_var, r_on)[source]
Join vars l_var and r_var and store result as viewname
- load(viewname, objects, sco_type=None, query_id=None, preserve_ids=True)[source]
Import objects as type sco_type and store as viewname
- lookup(viewname, cols='*', limit=None, offset=None, col_dict=None)[source]
Get the value of viewname
- number_observed(viewname, path, value=None)[source]
Get the count of observations of value in viewname.`path` Returns integer count
- path_joins(viewname, sco_type, column)[source]
Determine if column has implicit Joins and return them if so
- schema(viewname=None)[source]
Get the schema (names and types) of table/view viewname or all tables if not specified
- summary(viewname, path=None, value=None)[source]
Get the first and last observed time and number observed for observations of viewname, optionally specifying path and value. Returns list of dicts like {‘first_observed’: ‘2021-10-…’, ‘last_observed’: ‘2021-10-…’, ‘number_observed’: N}
- timestamped(viewname, path=None, value=None, timestamp='first_observed', limit=None, run=True)[source]
Get the timestamped observations of value in viewname.`path` Returns list of dicts like {‘timestamp’: ‘2021-10-…’, ‘{column}’: ‘…’}
firepit.stix20 module
firepit.stix21 module
firepit.timestamp module
firepit.validate module
STIX and SQL identifier validators
firepit.woodchipper module
- class firepit.woodchipper.IscHoneypotJsonMapper[source]
Bases:
Mapper
- mapping = {'dest': 'network-traffic:dst_ref.value', 'dport': 'network-traffic:dst_port', 'proto': 'network-traffic:protocols', 'source': 'network-traffic:src_ref.value', 'sport': 'network-traffic:src_port', 'ts': ['first_observed', 'last_observed'], 'url': 'url:value', 'user_agent': "network-traffic:extensions.'http-request-ext'.request_header.'User-Agent'"}
- class firepit.woodchipper.SdsMapper[source]
Bases:
Mapper
- common_mapping = {'@timestamp': ['first_observed', 'last_observed'], 'Application': <function split_image>, 'Category': <function to_cat_list>, 'Channel': 'x-oca-event:module', 'EventID': <function to_action_code>, 'Hostname': 'x-oca-asset:hostname', 'Message': <function SdsMapper.<lambda>>, 'ProcessGuid': 'process:x_unique_id', 'ProcessId': 'process:pid', 'ProcessName': <function split_image>, 'SourceName': 'x-oca-event:provider', 'TimeCreated': ['first_observed', 'last_observed']}
- event_types = {'ConnectPipe': 18, 'CreateKey': 12, 'CreatePipe': 17, 'DeleteKey': 12, 'DeleteValue': 12, 'SetValue': 13}
- class firepit.woodchipper.ZeekCsvMapper[source]
Bases:
Mapper
- zeek_mapping = {'id.orig_h': 'network-traffic:src_ref.value', 'id.orig_p': 'network-traffic:src_port', 'id.resp_h': 'network-traffic:dst_ref.value', 'id.resp_p': 'network-traffic:dst_port', 'orig_ip_bytes': 'network-traffic:src_byte_count', 'orig_pkts': 'network-traffic:src_packets', 'proto': 'network-traffic:protocols', 'resp_ip_bytes': 'network-traffic:dst_byte_count', 'resp_pkts': 'network-traffic:dst_packets', 'ts': <function from_unix_time>}
- class firepit.woodchipper.ZeekJsonMapper[source]
Bases:
Mapper
- common_mapping = {'id_orig_h': 'network-traffic:src_ref.value', 'id_orig_p': 'network-traffic:src_port', 'id_resp_h': 'network-traffic:dst_ref.value', 'id_resp_p': 'network-traffic:dst_port', 'proto': 'network-traffic:protocols', 'ts': <function from_unix_time>}
- zeek_mapping = {'conn': {'orig_ip_bytes': 'network-traffic:src_byte_count', 'orig_l2_addr': 'network-traffic:src_ref.resolves_to_refs[0].value', 'orig_pkts': 'network-traffic:src_packets', 'resp_ip_bytes': 'network-traffic:dst_byte_count', 'resp_l2_addr': 'network-traffic:dst_ref.resolves_to_refs[0].value', 'resp_pkts': 'network-traffic:dst_packets'}, 'dns': {'answers': <function ZeekJsonMapper.<lambda>>, 'query': 'domain-name:value'}}
- firepit.woodchipper.guess_ref_type(sco_type, prop, val)[source]
Get data type for sco_type:prop reference
- firepit.woodchipper.merge_mappings(common, specific, key=None)[source]
Merge common mapping into specific[key] mapping
Module contents
Top-level package for STIX Columnar Storage.