Overview
Chronos-DFIR provides a professional dark-mode interface optimized for the “Data-Ink Ratio” principle — reducing visual noise while highlighting critical forensic alerts. The filtering system allows surgical isolation of relevant events from timelines containing millions of rows.Filter Architecture
Filters operate in dependency order (from README.md line 57): Modifying any filter immediately updates:- Grid (Tabulator virtual DOM)
- Histogram (Chart.js timeline)
- Dashboard cards (TTPs, risk score, event distribution)
- TTP Summary Strip (severity badges + MITRE technique pills)
Global Search
How It Works
The global search box performs substring matching across all visible columns in the grid.Enter Search Term
- Debounced input: 300ms delay prevents excessive re-rendering while typing
- Case-insensitive:
powershellmatchesPowerShell,POWERSHELL - Substring match:
cmd.exematchesC:\\Windows\\System32\\cmd.exe
Press Enter to Filter
- Rows not containing the search term are hidden
- Matching text is highlighted in yellow within cells
- Histogram updates to show only matching event distribution
- Dashboard recalculates based on filtered subset
Search Examples
Search for Suspicious Processes
Search for Suspicious Processes
powershell -encMatches:- Rows with
powershell.exe -EncodedCommandin CommandLine - Encoded PowerShell execution (MITRE T1059.001)
Search for IP Addresses
Search for IP Addresses
192.168.1.50Matches:- Any column containing the IP (SourceIP, DestinationIP, IpAddress, message fields)
Search for User Accounts
Search for User Accounts
svc_adminMatches:- Logon events with TargetUserName =
svc_admin - Process creation by service accounts
Search for File Paths
Search for File Paths
\\temp\\Matches:- Files accessed/created in temporary directories
- Suspicious execution from writable locations
Time Range Filtering
Time Controls
Located above the timeline histogram:Start Time
YYYY-MM-DD HH:MM:SSEnd Time
Time Range Use Cases
Isolate Incident Window
Isolate Incident Window
- Set Start:
2024-03-08 14:00:00(30 min before) - Set End:
2024-03-08 15:00:00(30 min after) - Apply filter
After-Hours Analysis
After-Hours Analysis
- Filter for
18:00:00-08:00:00range (requires multiple filter applications) - Review processes, logons, network connections
Spike Investigation
Spike Investigation
- Start:
2024-03-08 14:45:00 - End:
2024-03-08 14:46:00
Column Filtering
Filter by Column Values
Click any column header in the Tabulator grid to reveal filter options.Text Column Filters
=(equals)!=(not equals)like(contains substring)starts(starts with)ends(ends with)
Image column- Operator:
ends - Value:
powershell.exe - Result: Only rows where process path ends with
powershell.exe
Numeric Column Filters
=,!=,<,<=,>,>=
EventID column- Operator:
= - Value:
4624 - Result: Only successful logon events (Windows Security Event 4624)
Multiple Column Filters
Column filters stack with AND logic: Example: Suspicious PowerShell from SYSTEM account- Filter
Imageends withpowershell.exe - Filter
UserequalsNT AUTHORITY\SYSTEM - Filter
CommandLinelike-enc
Row Selection & Filtering
Manual Row Selection
Use the Tag checkbox column to manually select rows of interest.Select Rows
- Persistent selection: Selections survive pagination and AJAX reloads
- Cross-page selection: Select row 5 on page 1, then row 2005 on page 20
- Selection count: Header shows “N rows selected”
Apply Row Filter
“If during the inspection manual you selected five rows atypical with the check-box (Tag), when you press ‘Row Filtering’, Tabulator hides all the noise, leaving exclusively your manual selections visible.”Implementation (
static/js/grid.js line 180):Hide Empty Columns
The Hide Empty toggle is a critical noise-reduction feature (README.md line 63).How It Works
Enable Hide Empty
static/js/grid.js):-, or nan.Dynamic Re-Evaluation
- Initial dataset: 50,000 Windows Security events
- Column
SourceIPis empty for most events (only populated for Event ID 4624 network logons) - Apply column filter:
EventID = 4624 - Enable Hide Empty
- Result:
SourceIPis now visible (populated for logon events), while irrelevant columns likeServiceNameare hidden
Use Cases
EVTX with Mixed Event Types
EVTX with Mixed Event Types
- Filter to Event ID 4688 (Process Creation)
- Enable Hide Empty
- Result: Only process-relevant columns visible (CommandLine, ProcessName, User, ParentProcessName)
Cross-Source Timeline Analysis
Cross-Source Timeline Analysis
- Filter by artifact type (e.g., Global Search:
EVTX) - Enable Hide Empty
- Result: Only EVTX-specific columns visible
Column Management
The Manage Cols dropdown provides advanced column organization.Top Columns
Select Priority Columns
User, Process, CommandLine, Sigma_Tag).Apply Positioning
“Locates the checked columns in the dropdown and, in a ‘Reflow’ of grid, radically expels them to the left flank (next to the event timestamp). Displaces less valuable columns to the right.”Implementation: Tabulator
moveColumn() API reorders columns dynamically.CommandLine, Image, User, ParentImage
Filter Columns (Column Visibility)
Select Visible Columns
Advanced Filtering Workflows
Composition Example: Lateral Movement Investigation
Filter to Logon Events
EventID:- Operator:
= - Value:
4624
Filter to Network Logons
LogonType:- Operator:
= - Value:
3
Enable Hide Empty
Top Columns for Analysis
SourceIP, Computer, TargetUserNameResult: Key lateral movement indicators positioned left for easy scanningReview Timeline
Timestamp (click column header).Analysis: Identify source machines and lateral movement pathsPerformance Considerations
app.py → /api/data/{filename}):
- Polars vectorized expressions: Column filters and global search use Polars
filter()expressions (C++ implementation via PyArrow) - Remote pagination: Grid requests data in chunks (default: 100 rows per page)
- Sort offloading: Sorting happens server-side, not in browser
blockRedraw()/restoreRedraw()wrapper for batch column operations (50 columns = 1 redraw instead of 50)- Debounced dashboard refresh (1200ms delay after filter change to prevent excessive API calls)
- Histogram debounce on selection changes (400ms)
Filter State Management
Reset Filters
Click Reset Filters ⟳ to clear:- Global search query
- Column header filters
- Row selection (but preserves selected IDs if not in selection view mode)
- Hide Empty state
- Time range (cleared separately via time controls)
- Column visibility from Filter Cols (use Manage Cols dropdown to restore)
Filter Persistence
Current behavior: Filters are session-only (cleared on page refresh). Roadmap (Etapa 3 - Case Management UI):- Save filter configurations per case
- Named filter presets (e.g., “Lateral Movement Filter”, “PowerShell Execution Filter”)
- Share filter configurations across team
Keyboard Shortcuts
Ctrl+F/Cmd+F: Focus global searchCtrl+R/Cmd+R: Reset filtersCtrl+H/Cmd+H: Toggle Hide EmptyCtrl+E/Cmd+E: Export filtered data