Releases: rabbitstack/fibratus
v3.0.0
Release Notes
Explore the full changelog here.
New features
Direct/indirect syscall evasion scanners
Evasion scanners are designed to detect attempts by malware to bypass defenses by abusing direct or indirect syscall techniques.
Unprecedented performance and precision
Performance gains and improved precision in many areas spanning the rule engine, event processing and callstack symbolization.
Process token enrichment
Events are enriched with detailed information about process access tokens, such as integrity level and elevation type.
50+ curated detection rules
The system includes a new extended set of detection rules that covering privilege escalation, defense evasion and execution tactics.
Console output colourization
Terminal output is enhanced with color-coded formatting to make different event types, parameters, or fields easier to distinguish at a glance.
Eventlog alerts in JSON format
Alerts can be emitted to the Windows Event Log in structured JSON format, making them easier to parse, forward, and integrate with external systems such as SIEMs or log pipelines.
Breaking changes
- removal of
ps.child.*filter fields. Migrate tops.*fields instead LoadImageandUnloadImageevents renamed toLoadModuleandUnloadModuleregistry.valuefield semantics change. It now returns the value name. Useregistry.datato obtain the value data
v2.4.0
Release Notes
New features
- #370b43e: Enable callstack for
VirtualAllocevents - #8e81077: Enable callstack for
OpenProcessandOpenThreadevents - #efdd5e3: Introduce
*.pathfilter fields - #9df026f: New
intersectsoperator - #9a14aa9: New
foreachfunction - #bdf9844: New
CreateSymbolicLinkObjectevent type - #1f97cc2: Incorporate thread pool event telemetry
- #47564c2: Expose thread pool filter fields
- #a83dd8b: Add thread start address symbol and module filter fields
- #3b8494e: Add additional callstack filter fields
- #b0dabe0: Introduce
match-allrule engine strategy - #19776aa: New
isolaterule action
New rules
- #122e4b1: Suspicious object symbolic link creation
- #d87f913: LSASS memory dump via MiniDumpWriteDump
- #328f7be: Potential ClickFix infection chain via Run window
- #fd099e9: Executable file dropped by an unsigned service DLL
- #f317da0: LSASS handle leak via Seclogon
- #34c72bb: DLL loaded via LdrpKernel32 overwrite
- #6659103: Suspicious access to the hosts file
- #31fe23d: LSASS access from unsigned executable
- #20f33d9: Suspicious Netsh Helper DLL execution
- #aa2b51c: Potential shellcode execution via ETW logger thread
- #9ef00e5: Suspicious execution via WMI from a Microsoft Office process
- #a72f48f: LSASS process clone creation via reflection
- #b99ea16: Potential process creation via shellcode
- #1cf8151: Suspicious XSL script execution
- #e624865: Suspicious HTML Application script execution
- #2e056be: Suspicious print processor loaded
- #070e642: Suspicious Vault client DLL load
- #fadd559: Suspicious Microsoft Office add-in loaded
- #8d82205: Potential port monitor or print processor persistence via registry modification
- #03532e9: Microsoft Office file execution via WMI
- #7df0828: Microsoft Office file execution via script interpreter
- #bd0f9a0: Suspicious Windows Defender exclusions registry modification
- #78c98cf: Windows Defender protection tampering via registry
- #cca922a: DLL Side-Loading via Microsoft Office dropped file
Enhancements
- #5fab88d: Bump
golang.org/x/netfrom 0.21.0 to 0.38.0 - #efc84b3: Symbolize thread start address
- #c73c2c3: Append/remove module by base address
- #913b71a: Speed up filter expression
Stringmethods - #21eb54b: Expand registry persistence keys list macro
- #eab4790: Improve callstack decorator
- #a84c1a1: Speed up symbol resolution
- #ad606f0:
substrfunction with optional argument - #4dabdf7: Limit YARA memory map scans
- #ae6e263: Remove system registry provider session
- #fc38e3e: Revamp and improve rule engine
- #56b83a0: Speed up image file characteristics parsing
- #48c0492: Better
expvarinsights for the Stackwalk decorator - #4473838: Improve
Unsigned DLL injection via remote threadrule - #965c28e: Improve
Credential discovery via VaultCmd toolrule - #3588421: New background and banner in MSI installer
Refactoring
- #318f593: Store memory mappings per process
- #43dad32: Introduce field arguments in the rule grammar
- #4c5fd06: Move
callstackinto independent package
Bug fixes
- #de9d99f: Invalid thread id for
MapViewFile/UnmapViewFileevents - #97e5764: Private allocation size computation
- #0026453: Use
iinoperator inLSASS memory dump via Windows Error Reportingrule - #ea6f95c: Adjust rule YAML indentation in the
fibratus rules createCLI - #5caa7da: Use process start time from event timestamp
- #83c8046: Check if the process executable is not empty to make rules more resistant against false positives
- #efeeafa: Lookup parent modules in the callstack symbolizer
- #099900b: Correct the condition in
Process spawned from macro-enabled Microsoft Office documentrule - #33d4a67: Overwrite Key Control Block (KCB) handle
- #933bd8a: Ensure event source is closed once
- #01a80ff: Improve
Hidden local account creationrule - #dac9381: Erratic driver identification
- #1e951d5: Interpolation for arg-based filter fields
- #de500a8: Add process executable exceptions for
Potential process injection via tainted memory sectionrule - #a94d08a: Add expire sequence condition for the
CreateThreadevent - #3b8bb5c: Check/initialize process state before out-of-order sequence evaluation
- #3d1006a: Exclusion for
OneDriveto tune false positives inPotential process hollowingrule - #a367399: Lookup live modules in symbolizer
- #0a08b8c: Allow interpolation for filter fields with underscore symbol
- #e37d1a6: Reduce
Potential privilege escalation via phantom DLL hijackingrule false positives - #9f8d98c: Add
CompatTelRunner.exeexclusion forUnusual process modified registry run keyrule - #3355c0e: Rework
Script interpreter host or untrusted process persistencerule for better resistance to false positives - #c490363: Rework callstack final user frame heuristics
- #4dc6121: Use the correct form of the
notoperator in rules - #495fbb9: Spurious process executable override
- #2b39cf4: Use
ps.namefield inMacro execution via script interpreterrule - #4b411be: General rule false positives reduction
Breaking changes
registry.key,image.name, andfile.namenow yield the base registry, image, or file name path. Useregistry.path,image.pathorfile.pathto obtain the full pathps.ancestorindexed-field now always returns the ancestor process name for the given level. Use theforeachfunction in conjunction with theps._ancestorspseudo field to evaluate other process attributesps.modulesfield has been removed. Use theforeachfunction in conjunction with theps._modulespseudo field to evalu...
v2.3.0
Release Notes
New features
- #3acb68b: Eventlog alert sender
- #fb4eac8: Augment process events with process flags
- #bfdceb7: Augment process state with creation flags
- #2511296: Add process creation flags filter fields
- #6957a63: Persist process creation flags to capture
- #4d62566: Add
image.is_dotnetfilter field - #b600df7: Add
tebparameter andthread.teb_addressfilter field - #67fffab: Add additional file filter fields
- #c66f028: Revamped YARA scanner
- #9d1aa6a: MSI code signing
New rules
- #a158eca: AppDomain Manager injection via CLR search order hijacking
- #be05bab: .NET assembly loaded by unmanaged process
- #9219478: Potential injection via .NET debugging
- #aef70db: Hidden local account creation
- #227ace7: DLL loaded via a callback function
- #40cfe0a: Process execution from a self-deleting binary
- #48be943: Image load via NTFS transaction
- #3cbc71f: DLL loaded via APC queue
- #b664239: Hidden registry key creation
- #cb070a1: Clear Eventlog
Enhancements
- #747b5f2: Bump
Gofrom1.21to1.23 - #53b5457: Bump
saferwall/pefrom1.4.4to1.5.4 - #cb89ca5: Bump
www.velocidex.com/golang/go-ntfsto latest version - #2f33b81: Add alert identifier
- #c161273: Route
saferwall/pelog messages tologrus - #dd0a1a6: Surface missing labels in rules validation subcommand
- #14ed9a2: Expose
StringShortmethods for process/event types - #7847552: Launch systray server manually
- #c5c131c: Disable CLR metadata parsing
Refactoring
- #1ef56d8: Rename
entrypointparameter andthread.entrypointfilter field tostart_addressandthread.start_addressrespectively - #b4fb489: Rename
pe.ps.child.file.namefilter field tops.child.pe.file.name - #84f301d: Unify ETW event processing pipeline
- #1cab108: Move template rendering to email sender
- #015e7f0: Generate Eventlog message compiler input file
- #2f66468: Create a common eventlog package
Bug fixes
- #98dc366: Solidify environment variable parsing from PEB
- #8d2f6de: Correct the usage of the
notoperator on bool fields - #095f0dc: Slice NTFS data buffer
- #1c5bd11: Avoid parsing an empty PE byte buffer
- #c78eb4b: Prevent loading malformed YAML configuration
- #7ccfa70: Fix parsing of image file characteristics
- #f7e8dc5: Skip reading hidden registry key value
- #b69ade4: Release file only by file object
- #a8dc8da: Panic redirection to logs
Breaking changes
- YARA configuration settings were restructured as per commit leading to removal of some properties
v2.2.1
Release Notes
Enhancements
- #60d965c: Bump
github.com/sirupsen/logrusfrom 1.4.1 to 1.9.3 - #f0b9a4f: Disables quoting for all values in the log messages
- #f410e6a: Dump events in rule matches
- #092923b: Show Fibratus version in logs
- #7a25286: Improve
Vulnerable or malicious driver droppedrule - #dee37b7: Introduce
open_remote_threadrule macro - #ca70858: Reduce
Potential SAM hive dumpingfalse positives - #cdf7f5f: Reduce
Unsigned DLL injection via remote threadfalse positives
Bug fixes
- #3517665: Fix the path of the systray server binary
- #f7608c5: Set systray server named pipe security descriptor
- #dffe9b4: Disable alert senders in capture replay mode
- #e9be320: Resolve indentation mess-up in Yara config and allow systray sender
- #48c1dc5: Compose attachment text with alert title and text
v2.2.0
Release Notes
New features
- PE headers modification detection with
pe.is_modifiedfilter field - NTFS parser for reading file data via raw device access
- New
SetThreadContextevent. Read more - Detection of vulnerable and malicious drivers via loldrivers dataset
- Add the ability to control process handle table initialization
- Rules validation CLI command and CI pipeline for automated rule validation
- Rules listing CLI command
- Kernel stack enrichment of process, file, thread, registry, and DLL events. Read more
- Callstack filter fields. Read more
- Introduce
min-engine-versionattribute in detection rules - Overhauled detection rule design and rule engine performance improvements
- Permit disabling the rule engine via configuration flag
- New
Systrayalert sender. Read more - Allow starting Fibratus in event forwarding mode
- Rule template creation via CLI
New rules
- Unusual file written or modified in Startup folder
- Unusual process modified the registry run key
- Network connection via startup folder executable or script
- Suspicious persistence via registry modification
- Suspicious Startup shell folder modification
- Script interpreter host or untrusted process persistence
- Suspicious Office template created
- Potential Process Doppelganging
- Vulnerable or malicious driver dropped
- Vulnerable or malicious driver loaded
- Potential process hollowing
- Suspicious DLL loaded by LSASS
- Process spawned via remote thread
- Potential thread execution hijacking
- Process injection via section mapping
- DLL Side-Loading via a copied binary
- Executable file creation from a macro-enabled Microsoft Office document
- RID hijacking
- Process spawned from macro-enabled Microsoft Office document
- Thread context set from unbacked memory
- Macro execution via script interpreters
- Suspicious Microsoft Office embedded object
- Unsigned DLL injection via remote thread
- Suspicious port monitor loaded
- Potential privilege escalation via phantom DLL hijacking
- Remote thread creation into LSASS rule
Enhancements
- Move registry persistence and startup shell folder key names to macro lists for improved readability
- Lift configuration file obligation and rely on default values
- Initialize default rules paths
- Establish the textual format as a default logger formatting output
- Improve inbound/outbound network rule macros
- Bump
Gotoolchain version to 1.21.x - Bump
golang.org/x/netpackage to 0.17.0 - Upgrade deprecated Github workflow actions
- More efficient event exclusion with event masks
- Dynamic event enablement by inspecting the loaded rule set
- Introduce system providers support to run specific providers in separate tracing sessions
- Improve
System Binary Proxy Execution via Rundll32rule - Improve
Regsvr32 scriptlet executionrule - Garbage-collect partials from rule indices
- Migrate MSI package building to
Wix5.0.0 - Upgrade deprecated actions in GHA workflows
Refactoring
- Sunset hex parameter types in favor of a new
Addresstype - Revamp trace controller and consumer infrastructure
Bug fixes
- Add missing flag/enum parameter values in the
kcapparameter constructor - Harden command line parsing and exe enrichment
- Empty capture file and replay crashes
- Revisit partial key computation
Breaking changes
- Detection rules layout has changed from group-based to individual files. This will be the final and definitive rule description format. As a consequence, certain attributes has changed while other mandatory attributes were added. All old rules must be migrated to the new format.
v2.0.0
Release Notes
New features
- New
VirtualAllocandVirtualFreeevents. Read more - New
MapViewFileandUnmapViewFileevents and mapped-files state. Read more - New
DuplicateHandleevent Read more - DNS telemetry via
QueryDnsandReplyDnsevents Read more - New
RegCloseKeyevent - Image signature information exposed via parameters and
image.signature.type/image.signature.levelfilter fields Read more - Image format parameters and filter fields
- Decorate non-open disposition
CreateFileevents with image format parameters - Macros for detecting loading of unsigned/untrusted modules
ps.sidfilter field contains the raw SID value, e.g.S-1-5-18- Parse and append
create_optionsparameter toCreateFileevents - Certificate info and filter fields for
LoadImage/UnloadImageevents - Expand
pefilter field set and allow lazily value extraction Read more - Support for expressions with bare boolean filter fields
Enhancements
- Significant core refactoring to aim for a more sustainable codebase growth
- Refactored many tests to embrace table-driven testing
- Introduce a new set of parameter types such as flags, system status code, file path, address, etc.
- Switch to
golang.org/sys/windowspackage for the vast majority of API calls and structures - Use the syscall generator to produce stubs for the API calls not available through
golang.org/sys/windows - Bump
golangci-lintlinters to version1.52.2 - Event consumer tests to verify the correctness of captured events
- Trace controller tests to verify real-world tracing session management
- Harden driver handle objects decoration of the file path parameters
- Expand the size of the
Ktypetype to accommodate 2-bytes event hook identifiers - Switch to the upstream
saferwall/pepackage for version resource parsing - Only allow a single instance of the Fibratus process to be run simultaneously
Configuration changes
- Disable initial handle snapshot to reduce overall memory utilization
- Added
RegCloseKeyto the list of ignored events - Removed the
Systemprocess image from the list of ignored processes
Deprecation
- Remove
kstream.raw-event-parsingconfig flag as binary event parsing is the default option now - Nuke TDH event parsing functionality
- Sunset Antimalware provider as we can tap into driver loading events via
LoadImageevents
Bug fixes
- Resolution of success system codes should compare the range of information values
- Use only the rule name in the filter field deprecation log message
- Solved
yaratests hanging issues
Breaking changes
- Convert flags event parameters to uppercase strings
- The
sidparameter and theps.sidfilter fields contain the raw SID value instead of the username/domain tuple - Command line parameters and filter fields contain the original, unexpanded command line
- The major kcap file format version is increased in this version. The side-effect is the inability to replay old capture files
operationparameter name in theCreateFileevent is renamed tocreate_dispositionshare_maskparameter contains the full permission name, e.g.READ|WRITE|DELETEcommparameter name in process events is renamed tocmdline
v1.10.0
Release Notes
New features
- filter language grammar for sequence rules and decommission of sequence policy types Read more
- bound fields and sequence aliases Read more
- file path manipulation filter functions Read more
- registry query value filter function Read more
yarafilter function. This opens up new possibilities in terms of combining behavior and signature-based detections Read more- new detection tradecraft focused on credentials access tactic. Specifically, the following rules were implemented:
- Suspicious password filter DLL registered
- Potential credentials dumping or exfiltration via malicious password filter DLL
- Suspicious access to Windows DPAPI Master Keys
- Unusual access to Web Browser Credential stores
- LSASS memory dump preparation via SilentProcessExit
- LSASS memory dump via Windows Error Reporting
- Suspicious access to Active Directory domain database
- Unusual access to SSH keys
- Sensitive access to Unattended Panther files
- generic event parameter filter field. The
kevt.argfilter field is able to extract any event parameter by its internal name. For example,kevt.arg[exe]would extract the process image executable path - filter fields deprecation strategy. Use
fibratus list fieldsto check deprecated fields status process.uuidfilter field as a more robust alternative to process id fields that is resistant to repetition
Enhancements
- optimization of filter accessors to retain only accessors that are relevant to declared filter fields
- sunsetting standard library PE parser in favor of saferwall/pe parser
Bug fixes
in/iinoperators should operate on LHS/RHS values of slice type
Breaking changes
- sequence policy types are no longer supported and should be migrated to sequence rules
v1.8.0
Release Notes
New features
- driver load events Read more
- initial catalog of detection rules based on the MITRE ATT&CK framework Read more
- macro expansion in rules Read more
- beautiful HTML rule alert emails Read more
- allow enabling/disabling Audit API Calls and Antimalware Engine ETW providers
- enrich handle events with driver image path for
Driverobject types - add
ps.sibling.argsfilter field - field interpolation in alert title and text strings and the ability to use Markdown/HTML syntax Read more
~=operator for case-insensitive string comparisons in filtersis_minidumpfilter function for checking the signature ofminidumpfiles Read more
Enhancements
- Go 1.19 upgrade and migration of deprecated functions
- bumped
libyarato version 4.2 - bumped Golang CI Lint toolchain
- add
content-typeconfig flag for email alert sender - add
labelsanddescriptionattributes in rule groups - loading rule files from paths with glob expressions
- optimize filter field accessors to prevent unnecessary traversing
- lazy evaluation of binary expressions for
andandoroperators - decommission type/category selector in
include/excluderule policies - prevent executing rules in sequence policies if the incoming event is not eligible for evaluation
- avoid adding duplicate tuples in sequence policies internal state
- improve registry key formatting from native key names
- limit the number of handles per proc and per global handle snapshotter state
- speed up UTF-16 string decoding. Kudos to @skeeto
Bug fixes
- sequence expiration slice out of bounds
- transition sequence state machine when the rule in
includeproduces a match
Breaking changes
- rule policies with the
selectorattribute will fail to load. As a workaround, remove the selector attribute and include it as a first condition in the rule.
v1.6.0
Release Notes
New features
- support for stateful runtime detections Read more
- file attributes/status parameters and field filters Read more
Enhancements
- raw ETW event parsing and a number of optimizations leverage 10x performance gains
- trace controller is refactored to facilitate the addition of new event sources
notoperator can negate complex paren expressions and functions- beautify filter error reporting and make it compatible with multiline filter expressions
Bug fixes
- rule group selector should support
OpenProcessandOpenThreadevents cidr_containsfunction implementation should return a correct value if no subnets are matched- paren expression should be visited recursively
- process command line normalization wouldn't correctly complete missing command lines for system processes
- stack overflow when replaying captures with the process ancestor filters
Breaking changes
- file and handle object parameters are represented in decimal instead of hex format if
--kstream.raw-event-parsing=true - event exclusions by process name now require case-sensitive image names
v1.5.0
Release Notes
New features
- new
OpenProcessandOpenThreadevents Read more - eventlog output Read more
- HTTP output Read more
- string filter functions Read more
ps.sibling.*,ps.domain, andps.usernamefilter fields Read more
Enhancements
- while introducing new event types, a significant refactoring took place to streamline the adoption of future event providers