Garuda is a PowerShell-based threat hunting and investigation framework that transforms raw Sysmon events into structured, actionable intelligence for Windows environments.
Garuda serves as both an investigation/hunting tool for security analysts and an educational platform for learning threat hunting methodologies. With 28+ investigation commands covering all Sysmon event types, it's suitable for individual analysts, security teams, researchers, and students developing cybersecurity skills.
- Master process execution analysis and parent-child relationships
- Understand file system monitoring and suspicious behaviors
- Study network connection patterns and DNS query analysis
- Learn registry analysis and persistence detection techniques
- Experiment with detection logic across all Sysmon event types (1-29)
- Develop and test threat hunting hypotheses with real data
- Research attack patterns for code injection and lateral movement
- Study advanced malware behaviors and evasion techniques
- Analyze security incidents with comprehensive Sysmon coverage
- Hunt for threats using advanced correlation and filtering
- Investigate suspicious activities across multiple view formats
- Perform remote and offline analysis for incident response (still in testing phase)
- 28+ Investigation Commands covering all Sysmon event types
- Multiple Analysis Views (Timeline, Interactive Tables, Detailed, Summary)
- Advanced Filtering by any event attribute with wildcard support
- Remote & Offline Analysis (still in testing phase) for flexible investigation workflows
- PowerShell 7.0 Integration with automatic module loading
Whether you're learning security analysis, researching detection methods, developing investigation skills, or conducting threat hunting on systems running Sysmon, Garuda provides a comprehensive platform to explore and analyze Sysmon telemetry.
- Windows 10 or Windows Server 2016 or later
- PowerShell 7.0 or later (Download here)
- Sysmon must be installed and configured before using Garuda
- Download and install from Microsoft Sysinternals
- Version 10.0 or later recommended (current: v15.15)
- Important: Use a filtered Sysmon configuration file that enables logging for required events
- Verify Sysmon is generating events:
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 5
- Administrative privileges for full functionality
- PowerShell Execution Policy set to allow script execution
Garuda leverages PowerShell 7.0's autoload functionality - simply install to your module path and start investigating!
-
Download the Repository
Option A: Using Git
git clone https://github.com/monnappa22/Garuda-framework.git
Option B: Direct Download
- Download ZIP from GitHub repository
- Extract to a folder (e.g.,
C:\Garuda-framework)
-
Install Garuda Module
Choose your installation scope: You can install Garuda either for the current user only or system-wide for all users.
Installs only for your user account, no admin privileges required for installation
Note: While installation doesn't require admin privileges, running Garuda commands will require administrator privileges to access Sysmon logs.
Method 1: Using PowerShell Commands
- Open PowerShell in the downloaded/extracted Garuda-framework folder
- Run the following command:
# Current user installation $UserModulePath = [Environment]::GetFolderPath('MyDocuments') + '\PowerShell\Modules' Copy-Item -Path ".\Garuda" -Destination "$UserModulePath\Garuda" -Recurse -Force
Method 2: Manual Copy Using File Explorer
-
Locate or create your PowerShell Modules directory:
- Path:
C:\Users\{YourUsername}\Documents\PowerShell\Modules - If the folder doesn't exist: Create the folder structure manually:
- Navigate to
C:\Users\{YourUsername}\Documents - Create a
PowerShellfolder (if it doesn't exist) - Inside PowerShell folder, create a
Modulesfolder
- Navigate to
- Path:
-
Copy the Garuda folder:
- From:
C:\Garuda-framework\Garuda(your extracted folder) - To:
C:\Users\{YourUsername}\Documents\PowerShell\Modules\Garuda - Use Ctrl+C and Ctrl+V or right-click β Copy/Paste
- From:
-
Verify the structure:
C:\Users\{YourUsername}\Documents\PowerShell\Modules\ βββ Garuda\ βββ Investigate\ βββ GarudaMods\ βββ GarudaObj\ βββ GarudaRaw\
Installs for all users on the system, requires administrator privileges
Method 1: Using PowerShell Commands (Run as Administrator)
- Open PowerShell as Administrator in the downloaded/extracted Garuda-framework folder
- Run the following command:
# System-wide installation (requires admin) $SystemModulePath = "$env:ProgramFiles\PowerShell\Modules" Copy-Item -Path ".\Garuda" -Destination "$SystemModulePath\Garuda" -Recurse -Force
Method 2: Manual Copy Using File Explorer (Run as Administrator)
- Open File Explorer as Administrator
- Navigate to system modules directory:
- Path:
C:\Program Files\PowerShell\Modules
- Path:
- Copy the Garuda folder:
- From:
C:\Garuda-framework\Garuda(your extracted folder) - To:
C:\Program Files\PowerShell\Modules\Garuda
- From:
- Verify the structure:
C:\Program Files\PowerShell\Modules\ βββ Garuda\ βββ Investigate\ βββ GarudaMods\ βββ GarudaObj\ βββ GarudaRaw\
-
Set PowerShell Execution Policy (if needed)
For Current User Installation:
# Check current execution policy Get-ExecutionPolicy # Set execution policy for current user only (no admin required) Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
For System-wide Installation:
# Check current execution policy at all scopes Get-ExecutionPolicy -List # Option 1: Set for current user (recommended, works in most cases) Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser # Option 2: Set system-wide (requires admin, affects all users) Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope LocalMachine
-
Verify Installation
# Test with a simple command (should show all available investigation cmdlets) Get-Command -Name "Investigate-*" -Module Garuda*
Note: PowerShell 7.0+ will automatically load modules when you use their commands, so no manual importing is needed.
Quick launch: Search "PowerShell 7" β Right-click β "Run as administrator"
Learn how to explore Garuda's capabilities:
# List all Investigation commands
Get-Command -Name "Investigate-*"Garuda provides comprehensive investigation commands for all Sysmon event types:
| Garuda Command | Sysmon Event | Event ID | Description |
|---|---|---|---|
Investigate-ProcInfo |
Process Creation | 1 | Investigate process creation events with command lines, hashes, and parent processes |
Investigate-FileCreateTimeChange |
File Create Time Change | 2 | Investigate file timestamp modification events |
Investigate-NetworkConnections |
Network Connection | 3 | Investigate network connections with source/destination analysis |
Investigate-SysmonServiceStateChange |
Sysmon State Change | 4 | Investigate Sysmon configuration changes |
Investigate-ProcTerminated |
Process Termination | 5 | Investigate process termination events |
Investigate-DriverInfo |
Driver Load | 6 | Investigate driver loading with signature verification |
Investigate-ImageLoadInfo |
Image/DLL Load | 7 | Investigate module/DLL loading events |
Investigate-RemoteThreadInfo |
Remote Thread Creation | 8 | Investigate remote thread injection attempts |
Investigate-RawAccessInfo |
Raw Access Read | 9 | Investigate raw disk access events |
Investigate-ProcessAccessInfo |
Process Access | 10 | Investigate inter-process access attempts |
Investigate-FileCreateInfo |
File Create | 11 | Investigate file creation events |
Investigate-RegCreateDeleteInfo |
Registry Key Create/Delete | 12 | Investigate registry key creation and deletion |
Investigate-RegSetValueInfo |
Registry Value Set | 13 | Investigate registry value modifications |
Investigate-RegRenameInfo |
Registry Key Rename | 14 | Investigate registry key renaming |
Investigate-FileStreamHashInfo |
File Stream Creation | 15 | Investigate alternate data stream creation |
Investigate-ServiceConfigInfo |
Service Configuration Change | 16 | Investigate Windows service configuration changes |
Investigate-PipeCreateInfo |
Named Pipe Creation | 17 | Investigate named pipe creation |
Investigate-PipeConnectInfo |
Named Pipe Connection | 18 | Investigate named pipe connections |
Investigate-WmiFilterInfo |
WMI Event Filter | 19 | Investigate WMI event filter activity |
Investigate-WmiConsumerInfo |
WMI Event Consumer | 20 | Investigate WMI event consumer activity |
Investigate-WmiBindingInfo |
WMI Event Consumer To Filter Binding | 21 | Investigate WMI consumer/filter bindings |
Investigate-DnsQueryInfo |
DNS Query | 22 | Investigate DNS resolution requests |
Investigate-FileDeleteInfo |
File Delete | 23 | Investigate file deletion events |
Investigate-ClipboardChangeInfo |
Clipboard Change | 24 | Investigate clipboard content changes |
Investigate-ProcessTamperingInfo |
Process Tampering | 25 | Investigate process image tampering |
Investigate-FileDeleteDetectedInfo |
File Delete Detected | 26 | Investigate detected file deletions |
Investigate-FileBlockExecutableInfo |
File Block Executable | 27 | Investigate blocked executable files |
Investigate-FileBlockShreddingInfo |
File Block Shredding | 28 | Investigate blocked file shredding attempts |
Investigate-FileExecutableDetectedInfo |
File Executable Detected | 29 | Investigate detected executable files |
Start with this simple command to see recent process activity:
Investigate-ProcInfoThis will display process creation events for the last 15 minutes (default timeframe).
Expected Result: You should see detailed process creation events. If you see:
- No events returned: Sysmon might not be generating Process Creation (Event ID 1) events
- Error messages: Check the Troubleshooting section
- Events displayed: Success! You're ready to explore more
Learn how to get detailed help for any investigation command:
# Get basic parameter information for commands
Get-Help Investigate-ProcInfo
Get-Help Investigate-NetworkConnectionsThis shows you all available parameters for each command.
Most Investigate-* cmdlets share these useful parameters:
Time Filtering - Control the time range of events to analyze:
-PastSeconds,-PastMinutes,-PastHours,-PastDays- Look back from now-FromLocalTimeand-ToLocalTime- Specific time range-FromUtcTimeand-ToUtcTime- UTC time range
Analysis Location - Choose where to investigate events:
-ComputerName- Investigate remote systems-Credential- Credentials for remote access-LogFile- Analyze offline .evtx files
Event Specific Filters - Filter by attributes specific to each event type:
-ProcessName,-DestinationIp,-TargetFilename,-RegKey, etc.
All Investigate-* cmdlets support different output formats via the -View parameter:
| View Option | Description | Best For |
|---|---|---|
Detailed |
Full event details (default) | Deep analysis of specific events |
Summary |
Condensed overview | Quick assessment of activity patterns |
InteractiveTable |
Sortable, filterable table | Exploring and correlating events |
Timeline |
Chronological event list | Understanding sequence of events |
TimelineList |
Detailed timeline format | Forensic timeline analysis |
# Process creation in the last 2 hours with detailed view
Investigate-ProcInfo -PastHours 2 -View "Detailed"
# Focus on specific process - show only cmd.exe launches in the last hour
Investigate-ProcInfo -ProcessName "cmd.exe" -PastHours 1
# Use wildcards to find processes - show all svchost processes in the last 20 minutes
Investigate-ProcInfo -ProcessName "*svchost*" -PastMinutes 20
# Specify exact time range using PowerShell's flexible datetime formats
Investigate-ProcInfo -FromUtcTime "2024-01-15 09:00" -ToUtcTime "2024-01-15 17:00"# Show network connections in chronological order over the last 4 hours
Investigate-NetworkConnections -PastHours 4 -View "Timeline"
# Find all connections to Google DNS server in the last day
Investigate-NetworkConnections -DestinationIp "8.8.8.8" -PastDays 1# View all file creation events in chronological order for the last 2 hours
Investigate-FileCreateInfo -PastHours 2 -View "Timeline"
# Monitor suspicious activity - find files created in any Temp folder in the last 6 hours
Investigate-FileCreateInfo -TargetFilename "*\Temp\*" -PastHours 6# View registry value changes with sortable/filterable table for the last hour
Investigate-RegSetValueInfo -PastHours 1 -View "InteractiveTable"
# Watch for persistence - monitor changes to Windows startup registry key
Investigate-RegSetValueInfo -RegKey "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"# Note: Remote analysis is in testing phase - use with caution
# Requires: PowerShell remoting must be enabled on the target system
# Investigate process activity on a remote computer with authentication
$Credential = Get-Credential
Investigate-ProcInfo -ComputerName "RemotePC" -Credential $Credential -PastHours 24# Note: Offline analysis is in testing phase - use with caution
# Requires: Sysmon and Garuda to be installed on the analysis system
# Analyze pre-collected Sysmon logs in timeline format for forensic analysis
Investigate-ProcInfo -LogFile "C:\Logs\sysmon.evtx" -View "Timeline"$PSVersionTable.PSVersion # Should be 7.0 or higher# Check Sysmon service status
Get-Service sysmon
# Verify Sysmon is generating events (should show recent events)
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 5
# Check if Process Creation events (ID 1) are being generated
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -FilterHashtable @{ID=1} -MaxEvents 3If no events: Your Sysmon configuration may not be enabling the required events. Consider using a comprehensive Sysmon configuration file.
# Check modules are available
Get-Module -ListAvailable Garuda*
# Force reload if needed
Remove-Module Garuda* -ForceA: Check that Sysmon is generating events for the time period you're investigating. Start with -PastMinutes 30 for recent activity.
A: Start with Investigate-ProcInfo for process activity, Investigate-NetworkConnections for network activity, or use the reference table to find cmdlets by Event ID.
A: This depends on your Sysmon log retention settings. Windows Event Log has size limits that will affect how far back events are available.
A: Use user installation if you don't have admin privileges or want to keep Garuda for your account only. Use system installation if you want all users to access Garuda.
A: Use a filtered Sysmon configuration that enables logging for required events. Popular configurations available from the community:
- SwiftOnSecurity's sysmon-config: https://github.com/SwiftOnSecurity/sysmon-config
- Olaf Hartong's Sysmon-Modular: https://github.com/olafhartong/sysmon-modular
A: Run Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser to allow PowerShell script execution for your user account.
- AI-Powered Threat Hunting: Watch how LLMs can perform autonomous threat hunting with Garuda - Watch Video
- Issues: Report bugs or request features on GitHub Issues
- Documentation: Check cmdlet help with
Get-Help <cmdlet-name> - Community: Engage with other users and developers
- Twitter: Follow @monnappa22 for updates and detailed documentation (coming soon!)
- YouTube: Subscribe to MonnappaKA for video tutorials (more videos coming soon!)
Contributions are welcome! Please feel free to submit pull requests, report bugs, or suggest enhancements.
See CONTRIBUTING.md for detailed contribution guidelines.
Garuda uses a dual license model to support both open source use and commercial applications:
For personal, educational, research, and open source projects:
- β Free to use, modify, and distribute
- β Full source code access
- β Community contributions welcome
- π Requirements: Derivative works must be GPL v3, source code must be shared
For commercial products and proprietary applications:
- β No GPL v3 restrictions - keep your modifications private
- β Embed in closed-source products
- π‘ Contact: [email protected]
Choose GPL v3 if:
- You can share your source code modifications
- You're building open source applications
- You want to contribute to the community
Choose Commercial License if:
- You need to keep modifications proprietary
- You're embedding in commercial products
- You can't comply with GPL v3 requirements
See LICENSE for complete terms and commercial licensing options.
Β© 2025 Monnappa K A. All rights reserved.
For Inquiries: [email protected]