All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Multi-process support for stix-shifter data source interface
- Each native data source query is executed in a subprocess
- A pool of translators are created to pick up translation tasks for each transmitted page/batch
- Ingestion is serialized in main proccess to avoid multi-process execution for SQLite
- Two queues between transmitter/translator and translator/ingestor are used
- Both stix-shifter translation and firepit fast-translation are supported
- With debug flag, the translated results (JSON or DataFrame) will be dump to disk
- Unit tests for the translator subprocess in different modes
Additional syntax/keywords on singular timeunits
New variable transformer function
ADDOBSID
- Add new syntax and codegen
- Add additional documentatoin
Unit tests on CLI
- Invoking with
kestrel x.hf
- Invoking with
python -m kestrel x.hf
- Invoking with
- No dumped data in stix-shifter interface when debug is enabled
- Multiprocessing conflict with
runpy
- STIX-shifter module verification failure due to pypi website update
- Deprecated functions in
kestrel/codegen/relations.py
- Examples in Kestrel config YAML
Kestrel variable definition syntax changed back to
CNAME
fromECNAME
stix-shifter data source profile config changes
- Replace
result_limit
withretrieval_batch_size
- Replace
timeout
withsingle_batch_timeout
- Add default values for the configs
- Document updates
- The new fields will be processed by Kestrel before given to stix-shifter
- Replace
Replace stix-shifter sync APIs with async APIs
- Scalability end-to-end testing for large query with multiple pages
- Test cases for new stix-shfiter data source configs
Temporary fix of stix-shifter/issues/1493
- Add retry-once logic if server timeout (busy CPU on the client side)
- Nullify the pipelining; need better long-term fix to enable it
Fixed bugs and reimplement
transmission_complete()
in stix-shifter data source interface
- Upgrade stix-shifter from v4 to v5 in the stix-shifter datasource interface
- Bump stix-shifter version to v5.3.0 to include latest Elastcisearch ECS mappings
- Restrict scopes of Github workflows to eliminate unnecessary executions
- stix-shifter datasource interface query procedure pipelining: a producer-consumer model for transmission and translation/ingestion
- Integration testing with stix-shifter and the first live data source---Elasticsearch
- Raw String implemented in Kestrel
- Documentation on raw String
- Logging module reimplemented to fix #334
- asyncio bug in
tests/test_fast_translate.py
- A bug in firepit v2.3.16 when fast translation is in use; fixed in firepit v2.3.17
- Improved logic on prefetch skipping; fix #322
- Fixing several unit tests with the improved prefetch skipping logic
- Using process UUID for process identification #252 #93
- Connector timeout config in stix-shifter data source interface doc
- Library deprecation: pkg_resources
- Invalid STIX bundle (missing identity SCO type) yielded by stix-shifter data source interface
- Python 3.7 support
- Typo in pip install suggestion for stix-shifter modules
- Updated github workflows
- Vars created via assign should not lose reference attributes #312
- Alpine Linux install requirement
- Actionable suggestion in stix-shifter connector error msg
- Relation between config files in documentation
- stix-shifter 4.6.2 fixing elastic_ecs connector get_pagesize error
- firepit 2.3.14 improving fast translation
- Fast translation as an option for stix-shifter datasource interface
- Configurable
RETRIEVAL_BATCH_SIZE
in stix-shifter interface - Doc on configurable
RETRIEVAL_BATCH_SIZE
- Tests on stix-shifter interface functions
- Fast translation integration bug with asyncio
- Default
RETRIEVAL_BATCH_SIZE
in stix-shifter interface set to 2000 - stix-shifter API argument name change to be consistent across connectors
- stix-shifter minimal version for elastic_ecs connector pagination support
- stix-shifter minimal version for elastic_ecs connector mapping update
- stix-shifter elastic_ecs connector (without pagination support yet) incompatibility
- Uninstall the incorrect version of stix-shifter connector if exist #288
- Reference in attribute support for expression #290
- Overview page for installation/setup doc
- Default
RETRIEVAL_BATCH_SIZE
in stix-shifter interface increased from 512 to 10000 - Retrieval (tranmission) stopping criteria upgrade to support multi-page query in the next stix-shifter release (targeting v4.6.1)
- Runtime installation doc structure/layout upgrade
- New escaping (regex) test case for parser
- New escaping (regex) test case via stix-bundle interface
- Readthedocs bullet rendering error #278
- Fixture teardown improvement in tests
- Stix-shifter version specification relax
- Up-to-date black styling (standard changes)
- Dialect configuration to stix-shifter interface doc #270
- Dozens of unit tests for the auto-complete function
- Stix-shifter 4.6.0 stix-bundle connector time range requirement
- Reimplement the Kestrel auto-complete function to fix broken logic #264
Kestrel doc for v1.5 syntax, mostly the language specification chapter
- New section on the Kestrel patterning: Extended Centered Graph Pattern (ECGP)
- New section on entity, attribute, and related mechanisms
- Commands section updated with v1.5 syntax
- Interface section rewritten with much more details
- Concepts/terminology section updated
ASSIGN
andMERGE
commands now require a return variable
- Faster dependency installation for all github workflows using Python wheels
- Python 3.11 in unit test (github workflow)
- STIX-shifter module verification failure due to pypi website update
- codecov rate limit for public repo
- Multiple test cases for escaped string parsed with main/ECGP parsers
- Escaped string in value for both ECGP and argument
- Token prefix not handled in
- Use firepit time function for timestamp parsing
- Update Lark rule
transform
tovtrans
to avoid Lark special function misfire
- Explicit dependency
python-dateutil
- Relative path support for environment variable starting with
KESTREL
#248 - Relative path support for path in
LOAD
/SAVE
- Relative path support for local uri, i.e.,
file://xxx
orfile://./xxx
inGET
- Unit test on relative path in environment variable
- Unit test on relative path in LOAD
- Unit test on relative path in data source in GET
- Type checking in kestrel.semantics.reference
- New exception
MissingDataSource
- Unit test on variable reference in GET
- Unit test on last data source reuse
- Missing data source if not specified #257
- SymbolTable type error in code generation
- Obsoleted exception
UnsupportedStixSyntax
Introduce ExtendedCenteredGraphPattern (ECGP) for WHERE clause
- Support optional SCO/entity type for centered graph (STIX compatible)
- Support optional square brackets (STIX compatible)
- Support Single or double quotes (STIX compatible)
- Support nested list as value (STIX compatible)
- Support Kestrel variable as reference
- Support escaped characters in quoted value
- Support ECGP to string/STIX/firepit transformation
- Support ECGP pruning (centered or extended components)
- Support ECGP merge/extend with another ECGP
- Parse into STIX (now ECGP) #14
- Normalize WHERE clause between GET and expression
- Add WHERE clause to command FIND
Upgrade arguments (in APPLY command)
- Support quoted string in arguments #170
- dereferring variables in arguments
Upgrade path (in GET/APPLY/LOAD/SAVE command)
- Support escaped characters in quoted datasrc/analytics/path
Upgrade JSON parser for command NEW
Upgrade operators in syntax to be case insensitive
Upgrade timespan
- absolute timespan without
t
and quotes - relative timespan for FIND
- absolute timespan without
Upgrade prefetch with WHERE clause to eliminate unnecessary query
Multiple test cases for new syntax and features
Add macOS (arm64) install requirement to documentation
Limit STIXPATH to ATTRIBUTE
- command: SORT, GROUP, JOIN
- expression clause: sort, attr
Use explicit list like
(1,2,3)
or[1,2,3]
for multi-value argumentFormalize semantics processor in parser-semantics-codegen procedure
- variable dereferencing in semantics processor
- variable timerange extraction in semantics processor
- links to Black Hat 2022 website, recording, and demo/lab
- Kestrel logo in PNG
- link to the Kestrel binder service blog post
- consistent stix-shifter and connector versions
- lowercase grammar strings
- multi-user cache folder support in debug mode #236
- ppid used in process identification (post-prefetch) #238
- process identification upgraded to a two-step approach
- fine-grained process identification time offsets
- per entity type prefetch config support #241
- support for automatically converting input files to STIX in stixbundle interface
- prefetch when parent_ref not in process table
- false positives in generic relation resolution
- second execution of a failed query should raise exception
- master runtime directory test case fix
~
support in config file path (env var)
- Fix NameError: name 'DataSourceError' is not defined
- Pass stix-shifter profile options into translation #230
- Relative timespans instead of START/STOP #181
- e.g.
LAST 5 MINUTES
- Group by "binned" (or "bucketed") attributes - e.g. GROUP foo BY BIN(first_observed, 5m)
- bump min Python version to 3.7
- update OCA slack invitation link
- broken /tmp/kestrel symbol link will crash a new session
- double close (double release resources) with context manager and aexit
- AttributeError with timestamped grouped variable #224
- subsequent GET would return no results #228
- documentation on macOS debug folder path
- interface figure updated with new planned interfaces
- dynamically load stix-shifter YAML profiles #227
- new exception: MissingEntityAttribute
- unit test: disp timestamped group by
- codecov GitHub App enabled instead of codecov-bot
- stixshifter interface module
connector
split frominterface
.
- Jupyter kernel crashing upon restart
- runtime warning generation for invalid entity type #200
- auto-complete relation in FIND
- auto-complete BY and variable in FIND
- add logo to readthedocs
- upgrade auto-complete keywords to be case sensitive #213
- add testing coverage into github workflows
- add codecov badge to README
- 31 unit tests for auto-completion
- the first unit test for JOIN
- two unit tests for ASSIGN
- five unit tests for EXPRESSION
- use tmp dir for generated testing data
- auto-deref with mixed ipv4/ipv6 in network-traffic
- missing
_refs
handling for 2 cases out of 4 #205 - incorrectly derefering attributes after GROUP BY
- incorrectly yielding variable when auto-completing relation in FIND
- pylint errors about undefined-variables
- update grammar to separate commands yielding (or not) a variable
- change FUNCNAME from a terminal to an inlined rule
- differentiate the terminal "by"i between FIND and SORT/GROUP
- GitHub Actions upgraded to setup-python@v3 + Python 3.10
- The description failed to render when uploading to PyPI.
- README.rst misses images when rendered at non-github sites, e.g., PyPI.
- internal data model upgraded to firepit 2.0.0 with full graph-like database schema:
- new firepit data schema named normalized.
- the normalized schema extracts/recognizes entities/SCOs from STIX observations and stores them and their relations.
- the normalized schema fully enables a Kestrel variable to refer to a list of homogeneous entities as a view in a relational-DB table.
- older hunts will need to be re-executed.
- syntax upgrade: introducing the language construct expression to process a variable, e.g., adding a
WHERE
clause, and the processed variable can be- assigned to another variable, so one does not need another
GET
command with a STIX pattern to do filtering. - passed to
DISP
, soDISP
is naturally upgraded to support many clauses such asSORT
,LIMIT
, etc.
- assigned to another variable, so one does not need another
- new syntax for initial events handling besides entities:
- entities in a variable do not have timestamps anymore; previously all observations of the entities were listed in a variable with timestamps.
- use the function
TIMESTAMPED()
to wrap a variable into an expression when the user needs timestamps of the observations/events in which the entities appeared. This is useful for analyzing and visualizing events of entities through time, e.g., time series analysis of visitedipv4-addr
entities in a variable.
- unit tests:
- 5 more unit tests for command
FIND
. - 2 more unit tests for command
SAVE
. - 2 unit tests for expression
TIMESTAMPED()
.
- 5 more unit tests for command
- new syntax added to language reference documentation
TIMESTAMPED
DISP
- assign
- repo updates:
- Kestrel logo created.
- GOVERNANCE.rst including versioning, release procedure, vulnerability disclosure, and more.
- the copy command is removed (replaced by the more generic assign command).
- repo front-page restructured to make it shorter but providing more information/links.
- the overview page of Kestrel doc is turned into a directory of sections. The URL of the page is changed from overview.html to overview.
- error message improvement: suggestion when a Python analytics is not found
- performance improvement: cache STIX bundle for any downloaded bundle in the stix-bundle data source interface
- performance improvement: pre-compile STIX pattern before matching in the stix-bundle data source interface
- performance improvement: skip prefetch when the generated prefetch STIX pattern is the same as the user-specified pattern
- documentation improvement: add building instructions for documentation
- documentation improvement: add data source setup under Installation And Setup
- documentation improvement: add analytics setup under Installation And Setup
- STIX bundle downloaded without
Last-Modified
field in response header #187 - case sensitive support for Python analytics profile name #189
- remote data store support
- unit test: Python analytics: APPLY after GET
- unit test: Python analytics: APPLY on multiple variables
- bump firepit version to fix transaction errors
- bug fix: verify_package_origin() takes 1 argument
- unit test: Python 3.6 EOL and removed from GitHub Actions
- unit test: python analytics basic tests
- unit test: stix-shifter connector verification
- dependency: matplotlib
- Kestrel main package
- matplotlib figure support in Kestrel Display Objects
- analytics interface upgraded with config shared to Kestrel
- Python analytics interface
- minimal requirement design for writing a Python analytics
- analytics function environment setup and destroy
- support for a variety of display object outputs
- parameters support
- stack tracing for exception inside a Python analytics
- STIX-shifter data source interface
- automatic STIX-shifter connector install
- connector name guess
- connector origin verification
- comprehensive error and suggestion if automatic install failed
- pretty print for exception inside a Docker analytics
- automatic STIX-shifter connector install
- documentation
- Python analytics interface
- Kestrel debug page
- flag to disable certificate verification in STIX-shifter profile example
- abstract interface manager between datasource/analytics for code reuse
- auto-complete with data source #163
- exception for empty STIX-shifter profile
- STIX-shifter profile name should be case insensitive
- exception inappropriately caught when dereferencing vars with no time range
- documentation about STIX-shifter connector install
- standalone Kestrel config module to support modular and simplified Kestrel config loading flow
- shareable-state of config between Kestrel session and any Kestrel data source interfaces
- stix-shifter interface upgraded with shareable-state of config support
- stix-shifter DEBUG level env var
KESTREL_STIXSHIFTER_DEBUG
- stix-shifter config/profile loading from disk
~/.config/kestrel/stixshifter.yaml
- debug message logging in
kestrel_datasource_stixshifter
- documentation for Kestrel main config with default config linked/shown
- default Kestrel config not managed by
pip
any more - turn main Kestrel from TOML into YAML
~/.config/kestrel/kestrel.yaml
- upgrade Kestrel data source interfaces API with new
config
parameter - default stix-shifter debug level to INFO
- documentation upgrade for
kestrel_datasource_stixshifter
- Kestrel config upgrade inconsistency #116
- advanced code auto-completion with parser support
- dollar sign incorrectly display in Jupyter Notebook (dataframe to html)
- installation documentation upgrade
- dependency version bump for the open hunting stack (Black Hat Europe 2021)
- installation documentation updates
- multi-data source support
- detailed error message from stix-shifter
- Limit Python<=3.9 since numpy is not ready for 3.10
- GROUP BY multiple attributes
- Aggregation function in GROUP BY
- Support alias in GROUP BY
- New test cases for GROUP BY
- Documentation update for GROUP BY
- Aggregated entity recognition in a variable after command GROUP
- Minimal dependent package versions #67
- Configration option to disable execution summary display #86
- Auto-removal of obsolete session caches #34
- SQLite requirement in installation documentation
- Python 3.6 support on command line utility #97
- Adjusting logging message levels to avoid confusion
- firepit API upgrade to support aggregated entities
- Integer/float support as JSON value in command NEW
- Documentation update on command SORT/GROUP regarding aggregated entities
- firepit version specification before API updates
- Single quotes support in STIX patterns to fix #95
- Variable summary deduplication
- Expected components in syntax error messages
- Display formatting of exceptions
- NaN to None in loading data
- Catch InvalidAttr in summary.py
- InvalidAnalyticsInput exception
- MacOS with Python 3.9 testing environment
- RSA link to README
- Missing log in command line mode #84
- Typo in documentation
- Select config file via environment variable #82
- Full default datasource/analytics schema support
- Initial install-in-docker support #54
- Command fix in documentation
- VarStruct init with pre-calculated parameters
- Documentation grammar and style improvements
- Syntax sugar: omitted schema inference (data source and analytics) if only one schema
- Temporary store view removal if not in debug mode #63
- Config override bug
- STIX bundle data source bug with HTTP/HTTPS
- GROUP BY error without id #43
- Cannot execute all-comment code block #50
- Inappropriate error for non-existence relation #51
- Improved
.gitignore
- Comprehensive process entity recognition #53
- Updated parameter handling in docker analytics interface #49
- Command FIND with network-traffic return gives exception #44
- Debug flag from environment variable
- Hunting GIF in README
- GitHub action for pull requests
- Unit testing
- Code style check
- Unused imports check
- GitHub issue templates
- More comprehensive entity identification logic
- Use firepit.merge() to implement prefetch merge
- Typo fix in doc
- Fix the timestamp parsing issue #6
- Fix version: pypi/support#214
- Add proper exception to non-existent variable #8
- Add three issue templates #10
- Add GitHub Action to publish to Pypi
- First release of Kestrel Core.