public/correlation-rules.ps1
function Edit-FalconCorrelationRule { <# .SYNOPSIS Modify Falcon NGSIEM correlation rules .DESCRIPTION Requires 'Correlation Rules: Write'. .PARAMETER Id Correlation 'rule_id' (specific version) .PARAMETER Name Correlation rule name .PARAMETER Description Correlation rule description .PARAMETER MitreAttack An object containing MITRE ATT&CK 'tactic_id' and 'technique_id' .PARAMETER Severity Correlation rule severity .PARAMETER Search An object containing 'search' properties ('filter', 'lookback', 'outcome', 'trigger_mode', 'use_ingest_time') .PARAMETER Operation An object containing 'operation' properties ('schedule', 'start_on', 'stop_on') .PARAMETER Status Correlation rule status .PARAMETER State Correlation rule state .PARAMETER Notification An object containing 'notifications' properties ('config', 'options', 'type') .PARAMETER Comment Audit log comment .LINK https://github.com/crowdstrike/psfalcon/wiki/Edit-FalconCorrelationRule #> [CmdletBinding(DefaultParameterSetName='/correlation-rules/entities/rules/v1:patch',SupportsShouldProcess)] param( [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',Mandatory, ValueFromPipelineByPropertyName,Position=1)] [ValidatePattern('^[a-fA-F0-9]{32}$')] [string]$Id, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=2)] [string]$Name, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=3)] [string]$Description, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=4)] [Alias('mitre_attack')] [object[]]$MitreAttack, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=5)] [ValidateSet(10,30,50,70,90)] [int32]$Severity, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=6)] [object]$Search, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=7)] [object]$Operation, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=8)] [ValidateSet('active','inactive',IgnoreCase=$false)] [string]$Status, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=9)] [ValidateSet('published','unpublished',IgnoreCase=$false)] [string]$State, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=10)] [Alias('notifications')] [object[]]$Notification, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:patch',ValueFromPipelineByPropertyName, Position=11)] [string]$Comment ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Format = @{ Body = @{ root = @('comment','description','id','mitre_attack','name','notifications','operation','search', 'severity','state','status') } } } } process { Invoke-Falcon @Param -UserInput $PSBoundParameters -BodyArray } } function Get-FalconCorrelationRule { <# .SYNOPSIS Search for Falcon NGSIEM correlation rules .DESCRIPTION Requires 'Correlation Rules: Read'. .PARAMETER Id Correlation rule identifier (specific version) .PARAMETER RuleId Correlation 'rule_id' (latest version only) .PARAMETER Filter Falcon Query Language expression to limit results .PARAMETER Query Perform a generic substring search across available fields .PARAMETER Sort Property and direction to sort results .PARAMETER Limit Maximum number of results per request [default: 100] .PARAMETER Offset Position to begin retrieving results .PARAMETER Detailed Retrieve detailed information .PARAMETER All Repeat requests until all available results are retrieved .PARAMETER Total Display total result count instead of results .LINK https://github.com/crowdstrike/psfalcon/wiki/Get-FalconCorrelationRule #> [CmdletBinding(DefaultParameterSetName='/correlation-rules/queries/rules/v2:get',SupportsShouldProcess)] param( [Parameter(ParameterSetName='/correlation-rules/entities/rules/v2:get',Mandatory, ValueFromPipelineByPropertyName,ValueFromPipeline)] [ValidatePattern('^[a-fA-F0-9]{32}$')] [Alias('ids')] [string[]]$Id, [Parameter(ParameterSetName='/correlation-rules/entities/latest-rules/v1:get',Mandatory)] [ValidatePattern('^[a-fA-F0-9]{32}$')] [Alias('rule_ids')] [string[]]$RuleId, [Parameter(ParameterSetName='/correlation-rules/combined/rules/v2:get',Position=1)] [Parameter(ParameterSetName='/correlation-rules/queries/rules/v2:get',Position=1)] [ValidateScript({Test-FqlStatement $_})] [string]$Filter, [Parameter(ParameterSetName='/correlation-rules/combined/rules/v2:get',Position=2)] [Parameter(ParameterSetName='/correlation-rules/queries/rules/v2:get',Position=2)] [Alias('q')] [string]$Query, [Parameter(ParameterSetName='/correlation-rules/combined/rules/v2:get',Position=3)] [Parameter(ParameterSetName='/correlation-rules/queries/rules/v2:get',Position=3)] [ValidateSet('created_on|asc','created_on|desc','last_updated_on|asc','last_updated_on|desc', IgnoreCase=$false)] [string]$Sort, [Parameter(ParameterSetName='/correlation-rules/combined/rules/v2:get',Position=4)] [Parameter(ParameterSetName='/correlation-rules/queries/rules/v2:get',Position=4)] [int32]$Limit, [Parameter(ParameterSetName='/correlation-rules/combined/rules/v2:get')] [Parameter(ParameterSetName='/correlation-rules/queries/rules/v2:get')] [int32]$Offset, [Parameter(ParameterSetName='/correlation-rules/combined/rules/v2:get',Mandatory)] [switch]$Detailed, [Parameter(ParameterSetName='/correlation-rules/combined/rules/v2:get')] [Parameter(ParameterSetName='/correlation-rules/queries/rules/v2:get')] [switch]$All, [Parameter(ParameterSetName='/correlation-rules/queries/rules/v2:get')] [switch]$Total ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name; Endpoint = $PSCmdlet.ParameterSetName } [System.Collections.Generic.List[string]]$List = @() } process { if ($Id) { @($Id).foreach{ $List.Add($_) } } elseif ($RuleId) { @($RuleId).foreach{ $List.Add($_) } } else { Invoke-Falcon @Param -UserInput $PSBoundParameters } } end { if ($List) { if ($RuleId) { # Add unique 'rule_id' values $PSBoundParameters['rule_ids'] = @($List | Select-Object -Unique) [void]$PSBoundParameters.Remove('RuleId') } else { $PSBoundParameters['ids'] = @($List) [void]$PSBoundParameters.Remove('Id') } Invoke-Falcon @Param -UserInput $PSBoundParameters } } } function New-FalconCorrelationRule { <# .SYNOPSIS Create Falcon NGSIEM correlation rules .DESCRIPTION Requires 'Correlation Rules: Write'. .PARAMETER Name Correlation rule name .PARAMETER Description Correlation rule description .PARAMETER Cid Customer identifier .PARAMETER MitreAttack An object containing MITRE ATT&CK 'tactic_id' and 'technique_id' .PARAMETER Severity Correlation rule severity .PARAMETER Search An object containing 'search' properties ('filter', 'lookback', 'outcome', 'trigger_mode', 'use_ingest_time') .PARAMETER Operation An object containing 'operation' properties ('schedule', 'start_on', 'stop_on') .PARAMETER Status Correlation rule status .PARAMETER TemplateId Correlation rule template identifier .PARAMETER Notification An object containing 'notifications' properties ('config', 'options', 'type') .PARAMETER TriggerOnCreate Trigger correlation rule upon creation .PARAMETER Comment Audit log comment .LINK https://github.com/crowdstrike/psfalcon/wiki/New-FalconCorrelationRule #> [CmdletBinding(DefaultParameterSetName='/correlation-rules/entities/rules/v1:post',SupportsShouldProcess)] param( [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',Mandatory, ValueFromPipelineByPropertyName,Position=1)] [string]$Name, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',ValueFromPipelineByPropertyName, Position=2)] [string]$Description, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',ValueFromPipelineByPropertyName, Position=3)] [Alias('customer_id')] [ValidatePattern('^[a-fA-F0-9]{32}(-\w{2})?$')] [string]$Cid, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',ValueFromPipelineByPropertyName, Position=4)] [Alias('mitre_attack')] [object[]]$MitreAttack, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',Mandatory, ValueFromPipelineByPropertyName,Position=5)] [ValidateSet(10,30,50,70,90)] [int32]$Severity, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',Mandatory, ValueFromPipelineByPropertyName,Position=6)] [object]$Search, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',Mandatory, ValueFromPipelineByPropertyName,Position=7)] [object]$Operation, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',Mandatory, ValueFromPipelineByPropertyName,Position=8)] [ValidateSet('active','inactive',IgnoreCase=$false)] [string]$Status, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',ValueFromPipelineByPropertyName, Position=9)] [Alias('template_id')] [string]$TemplateId, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',ValueFromPipelineByPropertyName, Position=10)] [Alias('notifications')] [object[]]$Notification, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',Position=11)] [Alias('trigger_on_create')] [boolean]$TriggerOnCreate, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:post',Position=12)] [string]$Comment ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name Endpoint = $PSCmdlet.ParameterSetName Format = @{ Body = @{ root = @('comment','customer_id','description','mitre_attack','name','notifications','operation', 'search','severity','status','template_id','trigger_on_create') } } } } process { if ($PSBoundParameters.Cid) { $PSBoundParameters.Cid = Confirm-CidValue $PSBoundParameters.Cid } Invoke-Falcon @Param -UserInput $PSBoundParameters } } function Remove-FalconCorrelationRule { <# .SYNOPSIS Remove Falcon NGSIEM correlation rules .DESCRIPTION Requires 'Correlation Rules: Write'. .PARAMETER Id Correlation rule identifier (specific version) .PARAMETER RuleId Correlation 'rule_id' (all versions) .LINK https://github.com/crowdstrike/psfalcon/wiki/Remove-FalconCorrelationRule #> [CmdletBinding(DefaultParameterSetName='/correlation-rules/entities/rules/v1:delete',SupportsShouldProcess)] param( [Parameter(ParameterSetName='/correlation-rules/entities/rule-versions/v1:delete',Mandatory, ValueFromPipelineByPropertyName,ValueFromPipeline,Position=1)] [ValidatePattern('^[a-fA-F0-9]{32}$')] [Alias('ids')] [string[]]$Id, [Parameter(ParameterSetName='/correlation-rules/entities/rules/v1:delete',Mandatory)] [ValidatePattern('^[a-fA-F0-9]{32}$')] [string[]]$RuleId ) begin { $Param = @{ Command = $MyInvocation.MyCommand.Name; Endpoint = $PSCmdlet.ParameterSetName } [System.Collections.Generic.List[string]]$List = @() } process { if ($Id) { @($Id).foreach{ $List.Add($_) } } elseif ($RuleId) { @($RuleId).foreach{ $List.Add($_) } } } end { if ($List) { $PSBoundParameters['ids'] = @($List) Invoke-Falcon @Param -UserInput $PSBoundParameters } } } |